Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Labelverschiebung verschiebt alle Komponenten (https://www.delphipraxis.net/133540-labelverschiebung-verschiebt-alle-komponenten.html)

BAMatze 4. Mai 2009 10:23


Labelverschiebung verschiebt alle Komponenten
 
Hallo wiedermal an alle DP´ler,

Ein neues Problem: Ich möchte ein Label an einem 2. Label ausrichten. Dies ist nötig, damit ich eine ordentliche Darstellung von mm/s^2 bekomme. (Andere Möglichkeit dies eventuell mit Zeichenformatierung zu erreichen ist mir leider nicht bekannt, falls jemand sowas kennt, bitte auch mitteilen)

Habe mir dazu folgende Funktion geschrieben:
Delphi-Quellcode:
function TContainer.LabelPosition_anpassen(ReferenzLabel: TLabel): TLabel;
begin
  result.Left := ReferenzLabel.Left + ReferenzLabel.Width;
end;
Das Ergebnis ist leider nicht sehr überzeugend, weil alle Komponenten dadurch verschoben werden. Fragt mich bitte nicht warum, wenn ich den Funktionsaufruf unterbinde, passiert dies nicht. Sieht jemand vieleicht warum dies passiert?

Mein Funktionsaufruf sieht wie folgt aus:
Delphi-Quellcode:
FLblStatusPotenzLabeldefBeschleunigung := LabelPosition_anpassen(FLblStatusAktuelleBeschleunigungAnzeige);
Vielen Dank
BAMatze

jfheins 4. Mai 2009 10:27

Re: Labelverschiebung verschiebt alle Komponenten
 
Du gibst eine Kalsse zurück ohne Sie zu erzeugen? ganz pöhse :mrgreen:

Gib mal den Integer zurück:
Delphi-Quellcode:
function TContainer.LabelPosition_anpassen(ReferenzLabel: TLabel): Integer;
begin
  result := ReferenzLabel.Left + ReferenzLabel.Width;
end;
Zuweisung entsprechend ... wobei es mich wundert, dass du keine AV um die Ohren gehauen bekommst :gruebel:

BAMatze 4. Mai 2009 10:33

Re: Labelverschiebung verschiebt alle Komponenten
 
Also verwende diese Art von Funktionen eingentlich auch erfolgreich für die Kreierung von Komponenten, deswegen dachte ich mir eigentlich, das müsste so doch auch funktionieren. Also auch die Labels, die ich damit verschieben möchte, werde über folgende Funktion vorher im Quellcode erzeugt:

Delphi-Quellcode:
function TContainer.CreateLabel(PosX, PosY, Textgroesse: integer; Text: string; Enabled: boolean): TLabel;
begin
  result := TLabel.Create(Self);
  result.Parent := Self;
  result.Left := PosX;
  result.Top := PosY;
  result.Caption := Text;
  result.Font.Height := Textgroesse;
  result.Enabled := Enabled;
end;
Deswgen auch keine AV (denke mal ist die AccessValuation). Die Komponenten existieren wirklich. Aber deine Möglichkeit sollte eigentlich auch funktionieren.

_frank_ 4. Mai 2009 16:32

Re: Labelverschiebung verschiebt alle Komponenten
 
Zitat:

Zitat von BAMatze
Delphi-Quellcode:
function TContainer.LabelPosition_anpassen(ReferenzLabel: TLabel): TLabel;
begin
  result.Left := ReferenzLabel.Left + ReferenzLabel.Width;
end;
...
Deswgen auch keine AV (denke mal ist die AccessValuation). Die Komponenten existieren wirklich. Aber deine Möglichkeit sollte eigentlich auch funktionieren.

nennt sich AccessViolation (Zugriffsverletzung), hat nix mit Valuation zu tun :)

zu dem eigentlichen Problem...die Komponente result existiert nicht...du musst den Pointer von result erstmal einem label zuweisen.
Delphi-Quellcode:
function TContainer.LabelPosition_anpassen(ReferenzLabel: TLabel): TLabel;
begin
  result:=TContainer.GetLabel(...);//muss halt implementiert werden :)
  //z.B. mit if (TContainer.Components[i] is TLabel) then result:=(TContainer.Components[i] as TLabel)
  result.Left := ReferenzLabel.Left + ReferenzLabel.Width;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 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