Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Konstantenausdruck erwartet

  Alt 27. Jan 2019, 18:59
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 :
radiobuttonposition2.jpg

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:
radiobuttonposition3.jpg

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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat