Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#8

AW: Frame laden und entladen

  Alt 15. Feb 2011, 11:56
Jetzt verstehe ich was du willst.

Hier wie ich es machen würde:
Delphi-Quellcode:
unit1
  TMyFrame = class(TFrame)
    FOnDestroy : NotifyEvent;
  property
    OnDestroy : NotifyEvent read FOnDestroy write FOnDestroy;
  end;
Delphi-Quellcode:
unit2

uses
  unit1;

type
  TShowFrame = class(TMyFrame)
    destructor Destroy; override;
  end;

destructor TShowFrame.Destroy;
begin
  if Assigned(OnDestroy) then
    OnDestroy(Self);

  inherited;
end;
Delphi-Quellcode:
unit3

uses
  unit1, unit2;

type
  TShowForm = class(TForm)
    procedure FrameDestroyed(Sender : TObject);
  end;

procedure TShowForm.FrameErzeugen;
begin
  // Frame vom Typ TShowFrame erstellen und
  Frame.OnDestroy = FrameDestroyed;
end;

procedure TShowForm.FrameDestroyed(Sender : TObject);
begin
  // neu zeichnen der anderen Frames
end;
In FrameDestroyed ist das sendende Frame allerdings noch da. Darauf muß man dann achten. wenn dem nicht so sein soll, dann muß man mit SendMessage arbeiten:

Delphi-Quellcode:
unit1
const
  MY_MESSAGE = WM_USER + 1; // alles über WM_USER geht
Delphi-Quellcode:
unit2

uses
  unit1;

type
  TShowFrame = class(TMyFrame)
    destructor Destroy; override;
  end;

destructor TShowFrame.Destroy;
begin
  SendMessage(Self.Handle, MY_MESSAGE, 0, 0);

  inherited;
end;
Delphi-Quellcode:
unit3

uses
  unit1, unit2;

type
  TShowForm = class(TForm)
    procedure FrameDestroyed(var msg: TMessage); message MY_MESSAGE;
  end;

procedure TShowForm.FrameDestroyed(var msg: TMessage);
begin
  // neu zeichnen der Frames
end;
Bei der Variante ist sicher, daß das Frame nicht mehr da ist.

P.S.: Es kann der eine oder andere kleine Fehler drin sein, ich wollte nur die Konzepte erläutern.

Gruß David

PPS.:
@Jumpy

not so OT: Programmieren besteht zu über 50% aus Design und dann erst Entwicklung. Man muß sich im Großen wie im Kleinen über für ein Konzept entscheiden. Das hängt davon ab was man machen will, was der Kunde will, wie das Problem umgesetzt werden kann und viele andere Faktoren.
Es gibt da einen Spruch. Jede Minute die du am Konzept verlierst gewinnst du beim Entwickeln. Soll heißen wenn das Kontept vollständig ist (was es wohl nie sein wird) kann es beim eigentlichen Schreiben des Codes keine Überaschungen mehr geben.

Geändert von David Martens (15. Feb 2011 um 12:04 Uhr)
  Mit Zitat antworten Zitat