Scrollleiste der Listbox verbergen

Rund um die LCL und andere Komponenten
Antworten
MTB1Leo
Beiträge: 32
Registriert: Do 20. Mär 2014, 18:00

Scrollleiste der Listbox verbergen

Beitrag von MTB1Leo »

Hallo,

Ich möchte in einem Programm mehrere Listboxen nebeneinander platzieren und sie dann mit einem "TUpDown" steuern. Dementsprechend brauche ich die Scrollleisten der Listboxen nicht.

Kann man die entfernen oder ausblenden?


Danke!

MTB1Leo
750GB HDD CPU: i3 boost 3.6Ghz RAM: 12GB GPU: ASUS RADEON R7 270X DC II

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Scrollleiste der Listbox verbergen

Beitrag von theo »

Geht glaub ich nur bei einem TListView.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Scrollleiste der Listbox verbergen

Beitrag von Michl »

Prinzipiell geht unter Win7 (zumindest bei mir) das Vorgehen von http://www.lazarusforum.de/viewtopic.php?f=55&t=8030.

Würde ich eine ListBox ohne Scrollbars haben wollen, würde ich diese ohne Scrollbars erstellen. Geht aber nur zur Laufzeit (k.A. ob das unter anderen Platformen auch so funktioniert):

Code: Alles auswählen

uses ... LCLType;
 
type
 
  { TMyListBox }
 
  TMyListBox = class(TCustomListBox)
    procedure CreateParams(var Params: TCreateParams); override;
  end;
 
  { TForm1 }
 
  TForm1 = class(TForm)
...
  private
    ListBox1: TMyListBox;
  end;
 
...
 
procedure TMyListBox.CreateParams(
  var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style:=Params.Style xor WS_HSCROLL xor WS_VSCROLL;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  ListBox1:=TMyListBox.Create(Self);
  ListBox1.Parent:=Self;
...
end;
Edit:
PS: Eigentlich ist das eine schöne Übung, um eine eigene Komponente zu erstellen. Dann kann man diese auch per IDE dem Formular hinzufügen :)

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

wp_xyz
Beiträge: 5131
Registriert: Fr 8. Apr 2011, 09:01

Re: Scrollleiste der Listbox verbergen

Beitrag von wp_xyz »

Michis Lösung geht auch unter dem Namen TListbox, wenn man den Vorfahren mit "StdCtrls.TListBox" qualifiziert und die Unit, in der dies implementiert wird, nach StdCtrl aufruft. Dieses recht elegante, aber auch fehleranfällige Verfahren wird von einigen Leuten aus der Delphi-Community propagiert (z.B. http://stackoverflow.com/questions/1478 ... and-use-it).

Code: Alles auswählen

 
unit Unit1;  // ein Formular mit einer Listbox
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, unit2;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    ListBox1: TListBox;
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
end.  
--------------------
unit Unit2;   // Unit, in der die scrollbar-lose Listbox implementiert wird
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, StdCtrls, LCLType;
 
type
  TListbox = class(StdCtrls.TListbox)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;
 
implementation
 
procedure TListBox.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style:=Params.Style xor WS_HSCROLL xor WS_VSCROLL;
end;
 
end.
 

Benutzeravatar
theo
Beiträge: 10859
Registriert: Mo 11. Sep 2006, 19:01

Re: Scrollleiste der Listbox verbergen

Beitrag von theo »

Ich weiss ja nicht welche Ansprüche ihr habt, aber das funktioniert unter GTK2 und Qt nicht afaics, und ist für mich daher keine Lösung.
TListView geht.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Scrollleiste der Listbox verbergen

Beitrag von Michl »

Ich wollte nur die Frage beantworten und hatte auch die vermutlichen Grenzen aufgezeigt (und wenn man mal die Suchmaschine bemüht, wir die Frage sehr oft aufgeworfen, mit wesentlich komplizierteren Lösungsansätzen, als das o.g. Bsp.)

Natürlich stimme ich Dir zu, dass eine Komponente, die so ein Verhalten von Haus aus bietet, dadurch getestet ist, besser geeignet ist!!!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Antworten