Lazarus beliebige Labels verschieben [gelöst]
Lazarus beliebige Labels verschieben [gelöst]
hallo erstmal
hätte da ne kleine Frage ich habe ein Programm indem ich Labels erstelle ihnen nahmen gebe z.B Label[1], Label[2] und soweiter
mein Problem ist jetz wenn ich das Panel erweitern will will ich dass sie sich auch verrücken aber sie bleiben auf der gleichen stelle
ein Label zu verschieben ist ja nicht schwer aber wie bekomme ich es hin in einer schleife 1 Label nach dem anderen zu verschieben da ich ja beliebig viele Label erstellen kann und somit weiss ich nicht wie viele Label der User errichten will
schonmal danke im vorraus
hätte da ne kleine Frage ich habe ein Programm indem ich Labels erstelle ihnen nahmen gebe z.B Label[1], Label[2] und soweiter
mein Problem ist jetz wenn ich das Panel erweitern will will ich dass sie sich auch verrücken aber sie bleiben auf der gleichen stelle
ein Label zu verschieben ist ja nicht schwer aber wie bekomme ich es hin in einer schleife 1 Label nach dem anderen zu verschieben da ich ja beliebig viele Label erstellen kann und somit weiss ich nicht wie viele Label der User errichten will
schonmal danke im vorraus
Zuletzt geändert von Dragomir am Di 5. Mai 2015, 15:48, insgesamt 1-mal geändert.
Re: Lazarus beliebige Labels verschieben
Hallo
Erstellst du die Labels im Code oder im Formular Designer?
Und warum schreiben alle "im voraus" mit zwei "r"?
Da möchte ich wirklich mal verstehen woher das kommt.
Erstellst du die Labels im Code oder im Formular Designer?
Und warum schreiben alle "im voraus" mit zwei "r"?
Da möchte ich wirklich mal verstehen woher das kommt.
Re: Lazarus beliebige Labels verschieben
Erstmal zu dem Voraus danke werde ich mir merken
ehm ich erstelle sie im Code habe auch schon ein Ansatz bekommen nämlich
nur bekomme ich jetz beim durchlaufen den Fehler
In Zeile 3929
und danke für die schnelle Antwort
ehm ich erstelle sie im Code habe auch schon ein Ansatz bekommen nämlich
Code: Alles auswählen
while iZaehler > 0 do
begin
TLabel('L_Text' + inttostr(iZaehler)).Left := 50;
iZaehler := iZaehler - 1;
end;
nur bekomme ich jetz beim durchlaufen den Fehler
In Zeile 3929
Code: Alles auswählen
procedure TControl.SetLeft(Value: Integer);
begin
{$IFDEF CHECK_POSITION}
if CheckPosition(Self) then
DebugLn('[TControl.SetLeft] ',Name,':',ClassName,' ',DbgS(Value));
{$ENDIF}
if csLoading in ComponentState then
begin
inc(FReadBounds.Right, Value - FReadBounds.Left);
FReadBounds.Left := Value;
Include(FControlFlags, cfLeftLoaded);
end;
[color=#FF0000] SetBounds(Value, FTop, FWidth, FHeight);[/color]
end;
und danke für die schnelle Antwort
Zuletzt geändert von Lori am Di 28. Apr 2015, 19:24, insgesamt 1-mal geändert.
Grund: Highlighter
Grund: Highlighter
Re: Lazarus beliebige Labels verschieben
ok habs raus falls das noch jemand sucht hier die lösung
Code: Alles auswählen
begin
iZaehler := iCounter;
while iZaehler > 0 do
begin
TLabel(FindComponent('L_Text' + inttostr(iZaehler))).top :=
TLabel(FindComponent('L_Text' + inttostr(iZaehler))).top + 50;
iZaehler := iZaehler - 1;
end;
Zuletzt geändert von Lori am Di 28. Apr 2015, 19:24, insgesamt 1-mal geändert.
Grund: Highlighter
Grund: Highlighter
-
- Beiträge: 1908
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Lazarus beliebige Labels verschieben
Ich möchte jetzt nicht ultra kleinkariert sein, allerdings würde ich dir gerne ein Paar Verbesserungen vorschlagen.
Zunächst mal wäre es schlauer für deine Labels einen Array oder Liste zu nehmen (TObjectList aus der contnrs Unit), damit hast du alle Labels in einer Liste gespeichert. Die Speicherauslastung wäre nur minimal Höher (Labelanzahl * SizeOf(Pointer) + die Größe der TObjectList (glaube 24 Byte)) und vor allem FindComponent benötigt mehrere unnötige Schleifendurchläufe(worst Case die Anzahl aller in der Form Registrierten Componenten) und das ganze 2 mal, dann ruft das noch die CompareString Funktion auf, welche auch noch mal einige Schleifendurchläufe durchführt. Außerdem bekommst du einen Fehler, wenn eines der Objekte nicht exsistiert wie es soll, und wenn du vorhast die Labels auf mehrere Parents zu verteilen geht das so sowiso schief.
Außerdem könntest du deinen Code mit einer For-Schleife und C Artigen Operatoren noch ein gutes Stück verkürzen:
Sind nur gut gemeinte Ratschläge
Ziemlich simpel, wenn man dieses Wort nicht so oft schreibt, und die Rechtschreibung davon noch nicht automatisiert, denkt man sich wie man es schreiben würde, und da denkt man sich wohl, das ist eine verknüpfung aus vor und raus, also vorraus
Zunächst mal wäre es schlauer für deine Labels einen Array oder Liste zu nehmen (TObjectList aus der contnrs Unit), damit hast du alle Labels in einer Liste gespeichert. Die Speicherauslastung wäre nur minimal Höher (Labelanzahl * SizeOf(Pointer) + die Größe der TObjectList (glaube 24 Byte)) und vor allem FindComponent benötigt mehrere unnötige Schleifendurchläufe(worst Case die Anzahl aller in der Form Registrierten Componenten) und das ganze 2 mal, dann ruft das noch die CompareString Funktion auf, welche auch noch mal einige Schleifendurchläufe durchführt. Außerdem bekommst du einen Fehler, wenn eines der Objekte nicht exsistiert wie es soll, und wenn du vorhast die Labels auf mehrere Parents zu verteilen geht das so sowiso schief.
Außerdem könntest du deinen Code mit einer For-Schleife und C Artigen Operatoren noch ein gutes Stück verkürzen:
Code: Alles auswählen
for iZaehler:=iCount downto 1 do
TLabel(FindComponent('L_Text' + inttostr(iZaehler))).top += 50;
Sind nur gut gemeinte Ratschläge
Und warum schreiben alle "im voraus" mit zwei "r"?
Da möchte ich wirklich mal verstehen woher das kommt.
Ziemlich simpel, wenn man dieses Wort nicht so oft schreibt, und die Rechtschreibung davon noch nicht automatisiert, denkt man sich wie man es schreiben würde, und da denkt man sich wohl, das ist eine verknüpfung aus vor und raus, also vorraus
Re: Lazarus beliebige Labels verschieben
Warf ganz und garnicht kleinkariert wenn man es nicht kennt woher sollte man wissen das es so funktioniert also erstmal ein dickes danke
gut werde es mir dann so vornehmen
vielen vielen dank
gut werde es mir dann so vornehmen
vielen vielen dank
-
- Beiträge: 6167
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Lazarus beliebige Labels verschieben
mein Problem ist jetz wenn ich das Panel erweitern will will ich dass sie sich auch verrücken aber sie bleiben auf der gleichen stelle
Code: Alles auswählen
Label1.Anchors := [akRight, akBottom];
Vielleicht hilft dir sogar diese einfache Zeile weiter.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Lazarus beliebige Labels verschieben
Danke probiere ich morgen aus
Re: Lazarus beliebige Labels verschieben
Funktioniert auch danke für die vielen und vorallem schnellen antworten