Thema: Delphi Form nichtmodal anzeigen

Einzelnen Beitrag anzeigen

Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: Form nichtmodal anzeigen

  Alt 11. Nov 2003, 10:34
Wenn ich kapiert habe, was Du willst, dann mußt Du dem SubForm ein Property verpassen vom Typ TStringList z.B.
Vor dem Aufruf aus irgendeinem Form setzt Du dann dieses Property auf eine StringListe, die im aufrufenden Form definiert ist. Im Subform hast Du (z.B.) ein Memo, dessen Lines-Eigenschaft du das Property im OnShow zuweist. Beim Schließen des Subforms schreibst Du den Inhalt des Memos zurück in die StringList des Aufrufer. Damit beim nochmaligen Aufruf des aufgerufenen und angezeigten Subforms durch ein weiteres MainForm die bis dahin erfolgten Änderungen nicht überschrieben werden, prüfst Du vor dem Setzten des Property's ob es schon gesetzt ist - wenn ja, schreibst Du erst die Änderungen in das ursprüngliche MainForm zurück und übernímmst dann die Werte des neuen Aufrufers:
Delphi-Quellcode:
unit SubForm;

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,stdctrls;

type
  TSubForm = class(TForm)
  private
    FStringList : TStringList;
    FMemo : TMemo;
  protected
    procedure SetStringList(Value : TStringList);
    procedure FormHide(Sender: TObject);
  public
    constructor Create(AOwner: TComponent); override;
    property Text : TStringList read FStringList write SetStringList;
  end;

implementation

constructor TSubForm.Create(AOwner: TComponent);
begin
  inherited;
  FStringList := nil;
  FMemo := TMemo.Create(self);
  with FMemo do begin
    Parent := self;
    Left := 10;
    Top := 10;
    Width := 200;
    Height := 200;
  end;
end;

procedure TSubForm.SetStringList(Value : TStringList);
begin
  if Assigned(FStringList) then begin // wenn schon vorhanden, dann Änderungen zurückschreiben
    FStringList.Assign(FMemo.Lines);
  end;
  FStringList := Value; //zeigt jetzt auf Die neue StringListe
end;

procedure TSubForm.FormHide(Sender: TObject);
begin
  if Assigned(FStringList) then begin // Änderungen zurückschreiben
    FStringList.Assign(FMemo.Lines);
  end;
  FStringList := nil; // zeigt nun nirgendwohin
end;
Im Projekt mußt Du zentral das SubForm erzeugen und in den Aufrufenden Forms muß die Variable MeinSubForm initialisiert sein (Create) Angenommen, Du hast in einem MainForm die Variable MeinHilfeText(TStringList) erzeugt und gefüllt, dann erfolgt der Aufruf des Subforms folgendermassen:
Delphi-Quellcode:
procedure TMainForm.SchowSubForm;
begin
  MeinSubForm.StringListe := MeinHilfeText; // weist dem SubForm Deinen Hilfetext zu;
  MeinSubForm.Show;
end;
Du hast recht - ist etwas, was man öfter braucht. um so mehr verwundert Deine Frage - wie wär's mit 'nem Buch - zum Beispiel "Jetzt lerne ich Delphi"?
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat