AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Steuerelement im OnShow verschieben

Ein Thema von messie · begonnen am 16. Feb 2009 · letzter Beitrag vom 17. Feb 2009
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Steuerelement im OnShow verschieben

  Alt 16. Feb 2009, 13:29
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: Steuerelement im OnShow verschieben

  Alt 16. Feb 2009, 13:40
ein "einfaches" Verschieben im OnShow tut bei mir seine Arbeit und das Edit wird verschoben.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  Edit1.Left := 100;
end;
wird es bei dir wirklich verschoben? (der Code, mit den richtigen Werten aufgerufen),

oder wird vielleicht nachträglich die Position noch durch etwas anderes verschoben?
(Align, Anchors oder Dergleichen)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

Re: Steuerelement im OnShow verschieben

  Alt 16. Feb 2009, 13:40
Zeig doch mal den Quältext.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Steuerelement im OnShow verschieben

  Alt 16. Feb 2009, 15:14
Zitat von DeddyH:
Zeig doch mal den Quältext.
Das Problem tritt in Zeile 2122 auf
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:
VCL Komponente dynForm (TFormResizer) Delphi 7
-------------------------------------------------

Version 1.0 von Michael Kaliga, kaliga@freenet.de
nach einer Idee von David A. Price, dprice@erols.com (1999)

Eigenschaften:
dynForm passt alle Komponenten eines Formulares in der
Grösse und Position an, wenn die Formulargrösse verändert wird.

FormResizer1.InitializeForm scannt das Formular, legt in einer StringList
die Startwerte ab und erstellt Sicherungen von vorhandenen Grafiken:
Metafile's + Bitmap's, wobei Metafile's in Bitmaps konvertiert werden.

FormResizer1.InitializeForm berechnet die neuen Größen und Positionen der
einzelnen Komponenten aus den Startwerten (!!!) und passt die Form-Komponenten
dann an.
Da die Startwerte und nicht die aktuellen Größen verwendet werden, behält
das Formular immer sein Aussehen;
ein Zerreissen/Zerfleddern wie bei den Delphi-Funktionen ChangeScale und ScaleBy
entfällt also.


Anwendung:

1. dynForm auf dem Formular platzieren.
2. Im OnCreate-Ereignis des Form's die Initialisierung
aufrufen, z.B. FormResizer1.InitializeForm;
3. Im OnResize-Ereignis des Form's die Grössenanpassung
aufrufen, z.B. FormResizer1.ResizeAll;

In den Eigenschaften von "TFormResizer" kann man :
a.) Die Größenanpassung Ein/Aus-Schalten.
Dies ist Notwendig, um gezielt eigene Anpassungen vornehmen zu können.
b.) Die proportionale Größenanpassung Ein/Aus-Schalten.
c.) Die proportionale Größenanpassung am Minimum/Maximum anpassen.
d.) Die Mindest-Schriftgrösse einstellen.
e.) Die Maximal-Schriftgrösse einstellen.
FormResizer1.InitializeForm scannt das Formular, legt in einer StringList
die Startwerte ab und erstellt Sicherungen von vorhandenen Grafiken.

Ist AllowResize := true wird anschließend das Formular so skaliert, das
es genau wie zur Entwicklungszeit auf den Screen passt, also proportional
zur Bildschirmauflösung.

Ist AllowResize := false wird das Formular nicht skaliert, es behält die
gleiche Height / Width wie zur Entwicklungszeit !

Ist KeepProportional := true so wird das Formular immer proportional skaliert.
Ist KeepProportional := false so kann das Formular verzerrt skaliert werden.
Ist KeepPropToMin := true so wird das Formular immer proportional so skaliert, das es immer komplett sichtbar ist.
Ist KeepPropToMin := false so wird das Formular immer proportional so skaliert, das es die maximal Höhe/Breite ausnutzt.
FormResizer1.ResizeAll skaliert das Formular neu, z.B. wenn man mutwillig
bei AllowResize := false Größenänderungen vorgenommen hat.
Da steckt etwas drin, was mir etwas verdächtig aussieht:
procedure Notification(AComponent : TComponent; Operation : TOperation); override; Könnte sein, dass deshalb das update nicht klappt.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

Re: Steuerelement im OnShow verschieben

  Alt 16. Feb 2009, 16:06
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.
$2B or not $2B
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Steuerelement im OnShow verschieben

  Alt 16. Feb 2009, 16:18
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
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#7

Re: Steuerelement im OnShow verschieben

  Alt 17. Feb 2009, 09:09
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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