Frage: ScrollBars bei zur Laufzeit erstellten Komponenten
-
- Beiträge: 4
- Registriert: So 29. Jun 2008, 22:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Frage: ScrollBars bei zur Laufzeit erstellten Komponenten
Bei zur Laufzeit erzeugten Komponenten sind diese im Parent nicht automatisch scrollbar.
Sobald der sichtbare Bereich ausgefüllt ist würde ich gerne mittels Scrollbars den Hintergrund scrollen aber das funzt halt nicht automatisch bei Forms oder Scrollboxen.
Wie komme ich am einfachsten daran?
Ich habe zur Veranschaulichung ein Projekt mit hochgeladen.
LG
Fram
Sobald der sichtbare Bereich ausgefüllt ist würde ich gerne mittels Scrollbars den Hintergrund scrollen aber das funzt halt nicht automatisch bei Forms oder Scrollboxen.
Wie komme ich am einfachsten daran?
Ich habe zur Veranschaulichung ein Projekt mit hochgeladen.
LG
Fram
- Dateianhänge
-
published.zip
- (3.38 KiB) 66-mal heruntergeladen
Was willst du genau erreichen?
Bei mir geht das z.B. so (GTK2 getestet)
Ausserdem hast du ein grobes Durcheinander bei den Konstruktoren
z.B:
new (Newpanel) ;
Newpanel^ := TPanel.create(MyForm^);
Das hier reicht völllig (kein new und kein ^):
Newpanel := TPanel.create(MyForm);
Die Dereferenzierung (^) macht FPC automatisch bei Klassen, ist also nur überflüssige Tipparbeit.
Bei mir geht das z.B. so (GTK2 getestet)
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var aPanel:TPanel;
begin
aPanel:=TPanel.Create(self);
aPanel.Parent:=ScrollBox1;
aPanel.Top:=200;
aPanel.Width:=400;
aPanel.Align:=alTop;
aPanel.Color:=clred;
aPanel.Caption:='Panel_'+inttostr(ComponentCount);
end;
z.B:
new (Newpanel) ;
Newpanel^ := TPanel.create(MyForm^);
Das hier reicht völllig (kein new und kein ^):
Newpanel := TPanel.create(MyForm);
Die Dereferenzierung (^) macht FPC automatisch bei Klassen, ist also nur überflüssige Tipparbeit.
-
- Beiträge: 4
- Registriert: So 29. Jun 2008, 22:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
@Theo
Ich habe halt wild rumprobiert mit allen möglichen Komponenten und dementsprechend munter die Bezeichner gewechselt....
Danke für den Hint mit der Dereferenzierung - ich programmiere noch nicht so lange in Pascal...
Gtk2 kompiliert grad bei mir nicht - aber ich brauche es eh für win32 Widgetset, und da gehts leider nicht...
@Christian
Vielleicht habe ich mich dumm ausgedrückt....
Ich meine: wenn ich Pannels zur Laufzeit zu einem Form oder einer Scrollbox hinzufüge und der sichtbare Bereich des Forms oder der Scrollbox ausgefüllt ist,
dann sollte es meiner Meinung nach möglich sein den Inhalt des Forms oder Scrollbox zu scrollen oder zu verschieben, um die dann nicht sichtbaren Controls anzuzeigen.
LG
Fram
Ich habe halt wild rumprobiert mit allen möglichen Komponenten und dementsprechend munter die Bezeichner gewechselt....
Danke für den Hint mit der Dereferenzierung - ich programmiere noch nicht so lange in Pascal...
Gtk2 kompiliert grad bei mir nicht - aber ich brauche es eh für win32 Widgetset, und da gehts leider nicht...
@Christian
Vielleicht habe ich mich dumm ausgedrückt....
Ich meine: wenn ich Pannels zur Laufzeit zu einem Form oder einer Scrollbox hinzufüge und der sichtbare Bereich des Forms oder der Scrollbox ausgefüllt ist,
dann sollte es meiner Meinung nach möglich sein den Inhalt des Forms oder Scrollbox zu scrollen oder zu verschieben, um die dann nicht sichtbaren Controls anzuzeigen.
LG
Fram
Probier mal sowas, das geht bei mir auch auf win32 / Wine:
fPanelscount ist ein integer Feld von Form1.
Die Scrollbox hat aber schon ihre Tücken.
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var aPanel:TPanel;
begin
aPanel:=TPanel.Create(self);
aPanel.Parent:=ScrollBox1;
aPanel.Width:=400;
aPanel.Height:=50;
aPanel.Top:=aPanel.Height*fPanelsCount;
aPanel.Left:=0;
inc(fPanelsCount);
aPanel.Caption:='Panel_'+inttostr(fPanelsCount);
end;
Die Scrollbox hat aber schon ihre Tücken.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
@Framercy
Schon sehr komisch was du da in deinem testprojekt machst. Du setzt Autoscroll überall auf false und wunderst dich das keine Scrollbars auftauchen. Auch der Sinn und Zweck von diesem Childsizing erschliesst sich mir nicht. Kaum entfernt man den ganzen "Quatsch" schon funktionierts problemlos.
Schon sehr komisch was du da in deinem testprojekt machst. Du setzt Autoscroll überall auf false und wunderst dich das keine Scrollbars auftauchen. Auch der Sinn und Zweck von diesem Childsizing erschliesst sich mir nicht. Kaum entfernt man den ganzen "Quatsch" schon funktionierts problemlos.
- Dateianhänge
-
Neuer Ordner (2).zip
- Ich hab das mal etwas aufgeräumt.
- (3.76 KiB) 56-mal heruntergeladen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 4
- Registriert: So 29. Jun 2008, 22:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Nö nix geht da - bei Dir liegen die erzeugten Panels alle übereinander - und sie sollen geordnet nebeneinander in einer 5er-Reihe angeordnet werden. Sind 5 Panels nebeneinander soll eine neue Reihe geöffnet werden. Solange bis keine Datensätze mehr aus meiner Tabelle kommen.Christian hat geschrieben:@Framercy
Schon sehr komisch was du da in deinem testprojekt machst. Du setzt Autoscroll überall auf false und wunderst dich das keine Scrollbars auftauchen. Auch der Sinn und Zweck von diesem Childsizing erschliesst sich mir nicht. Kaum entfernt man den ganzen "Quatsch" schon funktionierts problemlos.
in die Panels kommen noch ein paar textfelder für Name Telefon usw...
Also macht der "Quatsch" schon zumindest Teilweise Sinn....
Ohne:
Code: Alles auswählen
ChildSizing.Layout := cclLeftToRightThenTopToBottom;
ChildSizing.ControlsPerLine := 5;
Den Rest habe ich einfach mal so eingestellt weil ich dieses SizingVerhalten der Childs auch so benötige...
Was Autoscroll:=false angeht so ist auch das eine gewollte Einstellung da ich die Scrollbars von Anfang an sehen möchte...
Ich habe mich auch nicht gewundert wo die Scrollbars sind - sondern warum sie nicht arbeiten....
@theo
Danke irgendwie muss ich das Problem ja dann auf soeinem Wege in den Griff bekommen..
Gibts da eigendlich in Pascal eine Standart- Methode oder Prozedur um an die Anzahl der Steuerelemente inerhalb einer Scrollbox zu kommen? - Ich schau mal was es da so gibt.
LG
Fram