Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kompontenten dynamisch (https://www.delphipraxis.net/12477-kompontenten-dynamisch.html)

Killer 28. Nov 2003 11:12


Kompontenten dynamisch
 
Hi ich hab mir einige TLabels dynamisch erzeugt (per Schleife), wie bekomm ich sie nun dazu, dass sie einen regelmäßigen Abstand zwischen sich haben (zb. 20 Pixel) ect.?

ichhabefertig 28. Nov 2003 11:34

Re: Kompontenten dynamisch
 
Hallo,

Du kannst den TLabels doch Koordinatenwerte zuweisen, also Top und Left. Um immer 20 Pixel Abstand zu haben musst Du einfach Top auf den Topwert des darüberliegenden TLabels +20 +Höhe des darüber liegenden TLabels setzen.

Hoffe, das wahr einigermassen verständlich.

Killer 28. Nov 2003 11:53

Re: Kompontenten dynamisch
 
Das hier ist meine Schleife:
Delphi-Quellcode:
procedure TQuickReport3.QuickRepBeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
var i: Integer;
begin
 for i := 0 to Form1.DBGrid1.Columns.Count-1 do begin
  if TQRLabel(FindComponent('RLabel_'+IntToStr(i))) = nil then begin
  Lab := TQRLabel.Create(Self);
  Lab.Font.Style := [fsBold];
  Lab.Parent := QuickReport3.ColumnHeaderBand1;
  Lab.Name := 'RLabel_'+IntToStr(i);
  Lab.AlignToBand := True;
  Lab.Caption := Form1.DBGrid1.Columns[i].Title.Caption;
 end;
 end;
end;
Wie muss ich das denn jetzt einbauen? Also Top iss mal nebensächlich, da sie ja auf einem QuickReport-Band liegen, also müsste ich nur noch Left ändern, was ich aber nicht schaffe. Hat jemand nen Ansatz dafür?

himitsu 28. Nov 2003 12:05

Re: Kompontenten dynamisch
 
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

Delphi-Quellcode:
Procedure TQuickReport3.QuickRepBeforePrint(Sender: TCustomQuickRep; Var PrintReport: Boolean);
  Var i, T: Integer;

  Begin
{}  T := 30; {Position des obersten Labels}
    For i := 0 to Form1.DBGrid1.Columns.Count - 1 do
      If TQRLabel(FindComponent('RLabel_' + IntToStr(i))) = nil Then Begin
        Lab := TQRLabel.Create(Self);
        Lab.Font.Style := [fsBold];
        Lab.Parent := QuickReport3.ColumnHeaderBand1;
        Lab.Name := 'RLabel_' + IntToStr(i);
        Lab.AlignToBand := True;
        Lab.Caption := Form1.DBGrid1.Columns[i].Title.Caption;
{}      Lab.Left := 10; {Position von Links}
{}      Lab.Top := T;
{}      Inc(T, Lab.Height + 20{Abstand});
      End;
  End;
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Killer 28. Nov 2003 12:33

Re: Kompontenten dynamisch
 
Hallo himitsu, leider funktioniert dein Beispiel auch nicht. Habe grad vorher geschrieben, dass ich die Höhe nicht verändern muss, da die Labels auf einem Band plaziert sind :-D

Ich hab es mal wie folgt geändert, was aber ebensowenig funktioniert:
Delphi-Quellcode:
procedure TQuickReport3.QuickRepBeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
var i,T: Integer;
begin
 T := 0;
 for i := 0 to Form1.DBGrid1.Columns.Count-1 do begin
  if TQRLabel(FindComponent('RLabel_'+IntToStr(i))) = nil then begin
  Lab := TQRLabel.Create(Self);
  Lab.Font.Style := [fsBold];
  Lab.Parent := QuickReport3.ColumnHeaderBand1;
  Lab.Name := 'RLabel_'+IntToStr(i);
  Lab.AlignToBand := True;
  Lab.Caption := Form1.DBGrid1.Columns[i].Title.Caption;
  // Ab hier
  Lab.Left := T; {Position von Links}
  Inc(T, Lab.Width + 50{Abstand});
 end;
 end;
end;
Er plaziert mir immer alle Labels aufeinander, wodurch der Text logischerweise nicht mehr lesbar ist. :(

RomanK 28. Nov 2003 12:59

Re: Kompontenten dynamisch
 
Hoi, ich hab das so gelöst:
Delphi-Quellcode:
lab.left := ((i-1)*(lab.width + 20));
[edit]da bei mir i mit 1 beginnt muss das -1 bei dir raus!

himitsu 28. Nov 2003 13:00

Re: Kompontenten dynamisch
 
Wenn die Label's automatisch ausgerichtet werden, könntest du es ja mal so versuchen:

Delphi-Quellcode:
Procedure TQuickReport3.QuickRepBeforePrint(Sender: TCustomQuickRep; Var PrintReport: Boolean);
  Var i: Integer;

  Begin
    For i := 0 to Form1.DBGrid1.Columns.Count - 1 do
      If TQRLabel(FindComponent('RLabel_' + IntToStr(i))) = nil Then Begin
        Lab := TQRLabel.Create(Self);
{}      Lab.AutoSize := True;
        Lab.Font.Style := [fsBold];
        Lab.Parent := QuickReport3.ColumnHeaderBand1;
        Lab.Name := 'RLabel_' + IntToStr(i);
        Lab.AlignToBand := True;
        Lab.Caption := Form1.DBGrid1.Columns[i].Title.Caption;
{}      Lab.AutoSize := False;
{}      Lab.Width := Lab.Width + 50{Abstand};
      End;
  End;
Oder du legst eine andere, nicht sichtbare Komponente, als Abstandshalter, dazwischen.

(Angaben ohne Gewähr)

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz