Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 21. Apr 2003, 00:25
Moin Armin,

ja, geht.

Dazu musst Du in Deinem Form1 die Message WM_MOVE (Bewegung wurde beendet) bzw. WM_MOVING (Fenster wird bewegt) abfangen, und dieses an das andere Formular weitemelden.

Delphi-Quellcode:
// In Unit1

// in TForm1 deklarieren
    procedure FormMovingEnded(var msg : TMessage); message WM_MOVE;

//...

var
  msgMoveEnded : DWORD; // Für eigene Message

implementation

procedure TForm1.FormMovingEnded(var msg : TMessage);
begin
  // nur wenn das andere Formular existiert und sichtbar ist!
  if Assigned(Form2) and (Form2.Visible) then SendMessage(Form2.Handle,msgMoveEnded,0,0);
end;

initialization
begin // Eindeutige Message registrieren
  msgMoveEnded := RegisterWindowMessage('6868C4D1-3D8E-4DBC-B38F-B9C1C8A31E72');
end;


//**************************************************

// In Unit2

// In TForm2
  protected
    procedure WndProc(var msg: TMessage); override;

//...

implementation

procedure TForm2.WndProc(var msg: TMessage);
begin
  // auf die Private Message prüfen
  if msg.Msg = msgMoveEnded then
  begin // z.B. in ein Memo schreiben
    Memo1.Lines.Add('Form1 hat aufgehört sich zu bewegen: '+DateTimeToStr(now));
    exit;
  end;
  // Bei jeder anderen Message auf jeden Falle die original WndProc aufrufen
  inherited WndProc(msg);
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat