![]() |
Steuerelement im OnShow verschieben
Moin,
ich scheitere mal wieder an etwas ganz Einfachem: ich möchte die Position eines Edits situationsabhängig einstellen. Dazu rufe ich im OnShow eine Routine auf, die die Konfiguration parst und die Position festlegt. Beim ersten Anzeigen des Forms bleibt das Edit aber an der Stelle, wo es zur Entwurfszeit platziert wurde. Wie kann ich das Ding anschubsen? Danke, Messie |
Re: Steuerelement im OnShow verschieben
ein "einfaches" Verschieben im OnShow tut bei mir seine Arbeit und das Edit wird verschoben.
Delphi-Quellcode:
wird es bei dir wirklich verschoben? (der Code, mit den richtigen Werten aufgerufen),
procedure TForm1.FormShow(Sender: TObject);
begin Edit1.Left := 100; end; oder wird vielleicht nachträglich die Position noch durch etwas anderes verschoben? (Align, Anchors oder Dergleichen) |
Re: Steuerelement im OnShow verschieben
Zeig doch mal den Quältext.
|
Re: Steuerelement im OnShow verschieben
Zitat:
Ich habe den Auslöser, nicht aber die Ursache: ich arbeite mit skalierten Forms und benutze dazu eine Kompo (TFormresizer), die ich mal bekommen und für meine Zwecke angepasst habe. Die verursacht das Problem. Warum, habe ich noch nicht verstanden. Zitat:
Delphi-Quellcode:
Könnte sein, dass deshalb das update nicht klappt.
procedure Notification(AComponent : TComponent; Operation : TOperation); override;
Grüße, Messie |
Re: Steuerelement im OnShow verschieben
Na dann isses doch klar ...
TFormResizer speichert sich anfangs u.A. die Positionen der Komponenten, also auch die des Edits, jetzt verschiebst du zwar die Position, aber TFormResizer wird wohl danach die Position wiederherstellen (aus der aktuellen FormGröße mal die vorher gespeicherte Positionen) Hat TFormResizer sowas wie eine Updatefunktion? (wo man neue Positionen übernehmen kann) Ansonsten wirdst du vermutlich mal in der Speicher-StringList (find ich aber schon ein bissl brutal, eine Stringlist dafür zu verwenden) nach deinem Edit suchen müssen und den Wert dort ändern. |
Re: Steuerelement im OnShow verschieben
Ganz klar ist es eben nicht. Beim zweiten Öffnen des Fensters wird die neue Position übernommen, also der Initialisierungswert wird überschrieben. Der Init-Wert wird explizit durch Aufruf der procedure ResizeAll verwendet. Den Aufruf mache ich vorher.
Es muss beim ersten Resize die Benachrichtigung flöten gehen, denn der Wert für TEdit.Left steht schon auf dem neu zugewiesenen. Es wird nur nicht mit dem neuen Wert gezeichnet. Grüße, Messie |
Re: Steuerelement im OnShow verschieben
Hmmm, jetzt habe ich die Resizer-Kompo nochmal um eine Prozedur erweitert, mit der der Initialisierungswert der Position geändert werden kann. Durch den Aufruf im OnShow des Formulars wird es wieder beim ersten Aufruf ignoriert.
Wie kann ich ein sofortiges Neuzeichnen innerhalb der OnShow-Routine erzwingen? Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz