Hi Dennis07
Zitat:
"ScBxRadioButtons" und was ist "TRadioButtonsFrame"?
ScBxRadioButtons ist eine Scrollbox, die auf dem TRadioButtonsFrame - einem TFrame - liegt und die die einzelnen Radiobuttons enthält. Klar, eine Radiogroup wäre einfacher, aber nach meinem Empfinden optisch nicht so das Gelbe vom Ei.
Ich wollte aufzeigen, wie die Radiobuttons entstehen - beide Radiobutton-Guppen entstehen aus dem selben Code in der Prozedure TRadioButtonsFrame.RadioButtonPosition2.
Auf der Form habe ich 2 Frameinstanzen, die diese Prozedur geerbt haben und die nun aus dem MainformCreate heraus aufgerufen werden.
Die beiden Instanzen unterscheiden sich deutlich in der Grösse, was aus der Reportliste ganz am Schluss des Beitrags ersichtlich ist.
Diese Liste verrät aber auch, dass sich die Leftwerte im kleineren Container ab dem dritten Element ändern.
Beim Durchlesen sehe ich: etwas verwirrend dürfte die lokale Variable LHeight sein - die definiert nicht die Höhe des i-ten Elements, sondern dessen Top, der sich aus der Höhe der vorangegangenen Elemente ergibt.
Unglücklich ist auch dies:
LHeight := (i * FRadioButtonList.Items[i].Height) + ScBxRadioButtons.ClientHeight div 4;
Auch hier wird nicht die Höhe, sondern der Top der Elemente festgelegt (Beim erste Durchlauf 0 x die Höhe).
Inzwischen umgehe(?) ich das Problem, indem ich noch vor Eintritt in die Schleife einen Wert festlege:
ScBX := ScBxRadioButtons.ClientWidth div 2;
ScBx ist somit die Mitte der Scrollbox.
Left berechne ich dann in der Schleife:
LLeft := ScBX - (FRadioButtonList.Items[i].Width div 2);
Aber - und das ist wahrscheinlich das Wesentliche - der erste Topwert berechnet sich so:
LHeight := (i * FRadioButtonList.Items[i].Height) + ScBxRadioButtons.ClientHeight div 6;
Damit werden alle 4 Radiobuttons höher platziert. Und das bringt mich auf die Idee, dass die Scrollbox nach dem 2. Element eine vertikale Scrollbar eingeblendet und so den Clientwith verändert hat.
Gruss
Delbor