Einzelnen Beitrag anzeigen

Benutzerbild von Mirilin
Mirilin

Registriert seit: 21. Dez 2002
Ort: Lenzburg
861 Beiträge
 
Delphi 6 Professional
 
#11
  Alt 4. Feb 2003, 15:42
Frage, geht es auch so, oder gebe ich etwas nicht frei, oder stimmt sonst alles oder weniges nicht?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows,
  Messages,
  Forms,
  StdCtrls,
  ExtCtrls,
  Dialogs,
  Classes,
  Controls,
  Unit2,
  Unit3;

type
  TMainForm = class(TForm)
    PanelBar: TPanel;
    ButtonShow: TButton;
    procedure ButtonShowClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    Child : TChildForm;
    procedure CloseChild;
     { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  MainForm : TMainForm;
  WProc : Pointer;
implementation


{$R *.DFM}

function MyWndProc(Handle : hWnd; Msg, wParam, lParam : longint):longint;stdcall;
begin
  if Msg = Msg_SetToNil then
  begin
    MainForm.CloseChild;
  end;
  Result := CallWindowProc(WProc,Handle,Msg,wParam,lParam);
end;

procedure TMainForm.ButtonShowClick(Sender: TObject);
begin
  if Child = nil then
  begin
    Child := TChildForm.Create(MainForm);
  end
  else
  begin
    showMessage('Schon eine ChildForm vorhanden');
  end;

end;

procedure TMainForm.CloseChild();
begin
  Child := nil;
end;



procedure TMainForm.FormCreate(Sender: TObject);
begin
  WProc := Pointer(SetWindowLong(Application.Handle,GWL_WNDPROC,Integer(@MyWndProc)));
end;

end.
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows,
  Forms,
  Unit3;

type
  TChildForm = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  ChildForm: TChildForm;

implementation


{$R *.DFM}

procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  SendMessage(Hnd,Msg_SetToNil,0,0);
  Action := caFree;
end;

end.
Delphi-Quellcode:
unit Unit3;

interface
uses
  Messages,
  Forms,
  Windows;

var
  hnd : THandle;
const
  Msg_SetToNil = WM_USER+100;

implementation

initialization
  hnd := Application.Handle;

end.


Also Unit1 beinhaltet die MDIForm, Unit2 die MDIChildForm und Unit3 Globales.

(Ps. Wenn der Code zu lang ist, lösche ich ihn wieder.)

Danke für antworten,
Mirilin
Tobias
Die Physik ist für die Physiker eigentlich viel zu schwer.
  Mit Zitat antworten Zitat