Hi zusammen
Wenn man dann noch in allen Fällen identische Codeteile nicht mehrfach aufführt, wird das schon deutlich kürzer.
Das hab ich mir mal ganz schnell zu Herzen genommen so ganz nach dem DRY-Prinzip.
Damitsieht eine Umsetzung - es ist nicht die einzige - jetzt so aus:
Delphi-Quellcode:
procedure TRadioButtonsFrame.RadioButtonPosition2;
var i, x, y, LHeight: Integer;
begin
x := FRadioButtonList.Count - 1;
For i := 0 to x do
begin
LHeight := (i+1) * FRadioButtonList.Items[i].Height;
FRadioButtonList.Items[i].Left := 12;
FRadioButtonList.Items[i].Top := LHeight;
FRadioButtonList.Items[i].AlignWithMargins := true;
FRadioButtonList.Items[i].Margins.Top := 5;
FRadioButtonList.Items[i].Margins.Right := 25;
FRadioButtonList.Items[i].Margins.Bottom := 5;
FRadioButtonList.Items[i].Margins.Left := 80;
// if i = 0 then
// FRadioButtonList.Items[i].Top := PnlRadioButtons.ClientHeight div 4;
// if i = x then
// FRadioButtonList.Items[i].Align := alTop;
end;
end;
Die auskommentierten Zeilen sind
- Im ersten Fall 'versuchsweise' auskommentiert
- Im zweiten Fall kontraproduktiv, da <Align:=alTop> gesetzte Elemente über den bereits alTop gesetzten Elementen angeordnnet werden
Das Ergebnis :
Eine weitere Version, aufgrund des obigen Ergebnisses:
Delphi-Quellcode:
procedure TRadioButtonsFrame.RadioButtonPosition3;
var i, x, y, LHeight : Integer;
begin
x := FRadioButtonList.Count -1;
i := 0;
FRadioButtonList.First;
While i <= X do
begin
FRadioButtonList.Items[i].Left := 12;
FRadioButtonList.Items[i].AlignWithMargins := true;
FRadioButtonList.Items[i].Margins.Top := 5;
FRadioButtonList.Items[i].Margins.Bottom := 5;
FRadioButtonList.Items[i].Margins.Left := 80;
FRadioButtonList.Items[i].Margins.Right := 25;
LHeight := (i+1) * FRadioButtonList.Items[i].Height;
if i = 0 then
FRadioButtonList.Items[i].Top := LHeight+PnlRadioButtons.Height div 4
else
FRadioButtonList.Items[i].Top := LHeight;
// if i = x then
// FRadioButtonList.Items[i].Align := alTop;
inc(i);
FRadioButtonList.NextRec;
end;
Und das Resultat:
Die Radiobuttons befinden sichin einer Objectliste:
Delphi-Quellcode:
constructor TRadioButtonsFrame.Create(AOwner: TComponent);
begin
inherited;
FRadioButtonList := TDataObjectList<TRadioButton>.Create();
FRadioButtonList.OwnsObjects := True;
FRadioButtonList.Capacity := 5;
FRadioButtonList.insert(0,RadBtnPdf);
FRadioButtonList.Insert(1, RadBtnBitmap);
FRadioButtonList.Insert(2, RadBtnExif);
FRadioButtonList.Insert(3, RadBtnJpeg);
// RadioButtonPosition3;
end;
Die Elemente sollen mit deutlichem Abstand zum Left und Top des Containers (Hier Panel) angeordnet werden.
Gruss
Delbor