Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Radiogroup - Items verschieben im OnResize - Fehler

  Alt 6. Jun 2024, 10:04
Zitat:
füllst Du die Radiogroup per Code oder zur Designzeit?
Jo, erstmal das.

Wenn es da noch keine Items gibt, dann wäre es eh blöd, blind auf irgendwas zugreifen zu wollen.
DeineRadioGroup.Items.Count





.. vielleicht hilft es, die Aufgabe in afterConstruction auszuführen.
In Delphi 12 ist OnCreate immer im AfterConstruction, da muß man sich nicht extra speziell an Dieses dranhängen (override).
Und davor auch schon seit Jahrzehnten, wenn OldCreateOrder nicht True ist, was es sowieso nach Möglichkeit nicht sein sollte.

Aber egal, er machts es ja im OnResize, wie er schrieb


Vielleicht auf csCreating oder csLoading im ComponentState der Form oder des RadioGroup prüfen,
bzw. auf Assigned(DeineRadioGroup), während des Erstestellens/Ladens der Form,
und dann das Ausrichten nicht machen.



Die Items und Buttons werden nicht sofort synchronisiert,
vor allem beim Laden der Form, wenn es noch keine Handles (HWND) gibt, gibt es auch keine CheckButtons.

* Leider gibt es kein ButtonsCount, um die Anzahl zu prüfen.
* Es sind leider auch alle Methoden im PRIVATE, welche man für den Abgleich aufrufen könnte. (UpdateButtons, bzw. SetButtonCount)
* Andere Methoden/Ereugnisse zu finden, welche das sicher mit abgleichen, aber sonst nichts "schlimmes" machen, zu finden ist ... maaaaaaaaaa


Suche mal nach UpdateButtons in der Vcl.ExtCtrls.
Delphi-Quellcode:
  TCustomRadioGroup = class(TCustomGroupBox)
  private
    FButtons: TList;
    FItems: TStrings;
    ...
    procedure SetButtonCount(Value: Integer);
    procedure UpdateButtons;
    ...
    property ButtonList: TList read FButtons;
Das Einzige, was mir einfallen täte, wäre DeineRadioGroup.HandleNeeded; oder DeineRadioGroup.Handle; vor dem Zurgriff auf DeineRadioGroup.Buttons[] auszuführen,
aber besser wäre es schon "zusätzlich" vorher csCreating und oder das Andere zu prüfen und es dann noch nicht auszurichten.


[edit]
ohhh, property ButtonList: TList read FButtons; .
Delphi-Quellcode:
type TRadioGroupAccess = class(TRadioGroup);

if DeinButtinIndex < TRadioGroupAccess(DeineRadioGroup).ButtonList.Count then
$2B or not $2B

Geändert von himitsu ( 6. Jun 2024 um 10:07 Uhr)
  Mit Zitat antworten Zitat