Wie TCustomControl.ClientHeight beobachten? [gelöst]
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Wie TCustomControl.ClientHeight beobachten? [gelöst]
Bei meiner eigenen Komponente darf die ClientHeight nicht unter meine eigene Eigenschaft ItemHeight fallen. SetClientHeight kann ich ja leider nicht überschreiben. Wie bemerke ich Änderungen an ClientHeight, auch wenn sich Height nicht ändert (z.B. beim Einblenden der Scrollbalken)?
Zuletzt geändert von RSE am So 15. Nov 2009, 14:53, insgesamt 1-mal geändert.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Wie TCustomControl.ClientHeight beobachten?
Wärs nicht sinnvoller, dafür die bereits vorhandenen Constraints zu nutzen? 

-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: Wie TCustomControl.ClientHeight beobachten?
Constraints für ClientHeight? Wenn ich mich nicht ganz schlimm irre, gelten die Constraints für Height und Width und nicht für ClientHeight und ClientWidth. Genau da liegt mein Problem, wenn plötzlich eine Scrollbar oder so auftaucht, die den Unterschied zwischen Height und ClientHeight vergrößert, muss ich die Constraints erneut entsprechend anpassen, damit die ClientHeight nie zu klein wird. Wenn ich die Constraints anpasse, werde ich ggf. auch die Height anpassen, daraufhin wird OnResize ausgelöst und dabei kann ggf. das Fenster, in dem sich meine Komponente befindet, angepasst werden. Fehlend in dieser Kette ist lediglich ein DoOnClientResize oder sowas zum Überschreiben.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
Re: Wie TCustomControl.ClientHeight beobachten?
Bei mir (GTK2) TScrollbox wird auch ein resize event aufgerufen, wenn sich der Inhalt ändert.
Bsp. Ich habe eine TScrollBox mit einem Panel drin:
Die Wert (Caption) ändert sich, wenn ich den Inhalt (Panel) grösser mache sodass die Scrollbars erscheinen.
Ist das nicht, was du möchtest?
Bsp. Ich habe eine TScrollBox mit einem Panel drin:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
if Panel1.Width=200 then Panel1.Width:=900 else Panel1.Width:=200
end;
procedure TForm1.ScrollBox1Resize(Sender: TObject);
begin
Caption:=Inttostr(ScrollBox1.ClientHeight);
end;
Die Wert (Caption) ändert sich, wenn ich den Inhalt (Panel) grösser mache sodass die Scrollbars erscheinen.
Ist das nicht, was du möchtest?
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: Wie TCustomControl.ClientHeight beobachten?
Hm, nicht ganz, glaube ich. So wie du es beschrieben hast, habe ich zumindest noch nicht gearbeitet.
Beispiel:
Meine Komponente ist ursprünglich 80 Pixel hoch. Da ist ClientHeight also 80. Auf dieser Grundlage berechne ich Constraints.MinHeight auf z.B. 30, damit ClientHeight mindestens 30 groß ist. Jetzt wird ein Border hinzugefügt. Das benötigt rundherum an jeder Kante z.B. 2 Pixel, d.h. Height bleibt gleich, aber ClientHeight schrumpft von ehemals 80 auf 76. Ob dabei Resize aufgerufen wird, werde ich heute abend mal testen. Jedenfalls müsste ich in diesem Moment Constraints.MinHeight auf 34 setzen, damit ClientHeight immernoch die 30 nicht unterschreiten kann. Optimalerweise müsste mein Eingriff natürlich passieren, wenn die neuen Werte bereits berechnet, aber noch nicht übernommen wurden, damit ich ggf. die Height neu setzen kann, bevor es flimmert. Ich habe selbst noch nicht probiert wann genau und ob Resize aufgerufen wird etc.
Beispiel:
Meine Komponente ist ursprünglich 80 Pixel hoch. Da ist ClientHeight also 80. Auf dieser Grundlage berechne ich Constraints.MinHeight auf z.B. 30, damit ClientHeight mindestens 30 groß ist. Jetzt wird ein Border hinzugefügt. Das benötigt rundherum an jeder Kante z.B. 2 Pixel, d.h. Height bleibt gleich, aber ClientHeight schrumpft von ehemals 80 auf 76. Ob dabei Resize aufgerufen wird, werde ich heute abend mal testen. Jedenfalls müsste ich in diesem Moment Constraints.MinHeight auf 34 setzen, damit ClientHeight immernoch die 30 nicht unterschreiten kann. Optimalerweise müsste mein Eingriff natürlich passieren, wenn die neuen Werte bereits berechnet, aber noch nicht übernommen wurden, damit ich ggf. die Height neu setzen kann, bevor es flimmert. Ich habe selbst noch nicht probiert wann genau und ob Resize aufgerufen wird etc.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!
-
- Beiträge: 462
- Registriert: Mi 30. Jul 2008, 13:11
- OS, Lazarus, FPC: WinXP SP3 (L 0.9.28.2 FPC 2.2.4)
- CPU-Target: 32Bit
- Kontaktdaten:
Re: Wie TCustomControl.ClientHeight beobachten?
Resize wird auch bei Änderung von ClientHeight oder ClientWidth aufgerufen. Ich habe meinen Code jetzt direkt vor "inherited Resize;" eingebaut, klappt wunderbar.
Seit er seinen neuen Computer hat, löst er alle Probleme, die er vorher nicht hatte!