ich bin neu hier und stelle mal gleich meine erste Frage.
Eine kurze Vorstellung meinerseits: Ich bin seit 1988 in der IT-industrie und arbeite als Software-Entwickler / Software-Architekt. Pascal war die Sprache, die wir damals an der Uni gelernt haben und die ich nun wiederentdeckt habe.
Ich habe nun ein Problem mit einer CheckListBox: genau genommen mit einem Spaltenanzahlwechsel zur Laufzeit. Die CheckListBox ist auf einem Panel positioniert, das wiederum auf einer Seite eines TPairSplitter lokalisiert ist.
Schiebe ich nun den Slider des Splitters, dann verändert sich die Breite (Width) der CheckListBox entsprechend und in Abhängigkeit von dieser Breite berechne ich die Anzahl der Spalten innerhalb der CheckListBox neu.
Das klappt auch alles ganz gut, allerdings gibt es einen kleinen Bereich, in dem das nicht klappt.
Ausgangssituation: in der CheckListBox mit Spaltenanzahl=1 sind so viele Einträge, dass es rechts einen Scrollbar gibt. Vergörßere ich die Breite der CheckListBox nun mit dem Slider so weit, dass ich intern die Spaltenanzahl auf 2 setze, dann passiert es über 2-4 Pixel an genau der Wechselgrenze, dass die CheckListBox nicht angezeigt wird! Das Ganze hat offensichtlich damit zu tun, dass der rechte Scrollbar verschwindet und ein horizontaler Scrollbar neu gezeichnet werden soll. Das wird allerdings erst dann getan, wenn ich den Slider weiter verschiebe.
Ein von mir programmiertes Invalidate oder auch Repaint auf die CheckListBox hatte keine Wirkung.
In den Anlagen findet ihr das Phänomen dargestellt. Es geht um die hellblaue CheckListBox. UI Definition: Das Coding im Resize sieht so aus
... , wobei ich auch schon ClientWidth statt Width ausprobiert habe.procedure THauptfenster.TCheckListBoxAufgabenResize(Sender: TObject);
begin
TCheckListBoxAufgaben.Columns := Berechne_ListBoxSpalten_Nach_Resize(TCheckListBoxAufgaben.Width);
end;
Ich denke mir, dass ich hier nur einen saublöden Fehler mache, finde ihn aber nicht. Könnt Ihr mir ein paar Hinweise geben?
Viele Grüße
Wolfram
P.S.: EDIT: Win 7 64Bit, Lazarus 1.0.12 für FreePascal 2.6.2