[Delphi] Form2.Top := Form1.Top geht nicht?

Lukaro

Mitglied
Hallo :)

Um es schnell zu machen:
Ich habe zwei Formulare, von denen das eine knapp unter dem ersten erscheinen soll:

|---------|
|Form1|
|---------|
|Form2|
|---------|

Das erste ist zentriert, d.h. ich kann keine festen koordinaten verwenden.

Versucht habe ich es mit
Code:
Form2.Top := Form1.Top + Form1.Height;
Form2.Left := Form1.Left;
das müsste ja eigentlich gehen, ich habe jetzt jedenfalls 3Stunden versucht herauszufinden wieso Form1.Top scheinbar 0 oder 1 ist (schwafelmode on), habe mich mit TPoint, Clienttoscreen, clientheight, setbounds den docking-funktionen usw. beschäftigt, die google-server zum absturz gebracht und bin schließlich hier gelandet.

Ich wäre erfreut wenn mir jemand die vermutlich höchst einfache Lösung schreiben könnte.

Lukaro * verzweifelt
 
Zuletzt bearbeitet:
Also bei mir geht das hier:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin

Form2.Top:=Form1.Top+30;
Form2.Show;
end;

vllt hast du es ander falschen stelle Platziert,denn beim OnCreate Ereignis des 1ten Formblattes gibt es das 2te Formblat noch nicht ....
 
Ich habe den Befehl im Form2 aufgerufen. Ich werde nochmal testen, ob es im Form1 funktioniert.

Lukaro
 
hmm, komischerweise klappt es nun sowohl in Form1&2. ka, woran das jetzt lag.

Danke für deine Hilfe :)


Dann die nächste Frage, ich möchte erkennen wann ein Fenster verschoben wird und es dann "zurückschieben" bzw. ganz verhindern, dass es verschoben werden kann.
Ersteres wäre mir lieber, da ich im laufe meines Programmes mindestens dies brauchen werde.

Lukaro
 
Zuletzt bearbeitet:
Das ist leicht wenn man es schnell löst ,aber ich denke es gibt auch elegantere Lösungen:
also zuerst feste Werte setzen..(ich hab die startwerte beim erzeugen des Formulars genommen):
erst variablen deklarieren:
Code:
var
  Form1: TForm1;
  x,y : Integer;
implementation

{$R *.dfm}
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
x:= Form1.Left;
Y:= Form1.Top;
end;
Ich habs mit nem Timer gemacht:
Code:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if not  (Form1.Left=x) then (Form1.Left:=x);
 if not  (Form1.Top=y) then Form1.Top:=y;
end;
 
jo, daran hab ich auch schon gedacht, aber das frisst ja auch nur ressourcen.
gibt es nicht Funktionen wie ondrag, und wie funktionieren die?

## Edit: naja, ich geb mich jetzt mit dem Timer zufrieden. Müsst euch nicht weiter bemühen ;)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück