Thema: Delphi Application.Run

Einzelnen Beitrag anzeigen

omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Application.Run

  Alt 8. Okt 2004, 22:58
Moin,

ich weiss nicht warum du dir das Leben unnötig schwer machen möchtest.

ich habe ja schon geschrieben wie eine einfache Lösung aussieht.

Ich möchte hier mal auf dein Kommentar eingehen, das du auf Inhalte von Fenstern zugreifen möchtest.

Also du hast eine Main-Form und nur die wird automatisch erzeugt.
Alle anderen Fenster erzeugst du nur dann und nur solange du sie brauchst.
Die Kommunikation zwischen den Fenster funtioniert mit Zugriff-Methoden oder auch schon direkt über den Konstruktor. Wenn du z.B. eine Datenbankanwendung hast, brauchst du überall die Komponente, über die der Datenbankzugriff erfolgt (ich nehme hier mal als Beispiel DBExpress).
Also du hast jetzt eine Komponente (SQLConnection) auf dem Mainformular und musst diese natürlich den anderen Fenster auch zur Verfühgung stellen (und dies geschieht nicht über globale Varaiablen, weil man diese nicht braucht!).

Die einzelenen Fensterklassen müssen also einen neuen Kontruktor bekommen:

constrcutor create(AOwner:TComponent; SQLConnection:TSQLConnection); reintroduce;
begin
inherited create(AOwner);
FSQLConnection:=SQLConnection;
end;

FSQLConnection ist dann eine private Variable in der jeweiligen Fensterunit, über die die Verbindung zu einer Datenbank erfolgen kann.

Der Aufruf dieses Fensters sieht dann so aus:

Delphi-Quellcode:
procedure Fenster;
var Fenster:TFenster;
begin
  Fenster:=TFenster.create(Self, SQLConnection);
  try
    if Fenster.showmodal = mrOK then begin
      ...
    end;
  finally
    Fenster.release;
  end
end;
so und nunnochmal zu deinem Datenübergabe bzw. bekomm Problem...

Mit Zugriffsmethoden konnen nun die Daten zum Fenster bzw. vom Fenster geholt werden.

Im Publicteil der Fensterunit:

:
public
procedure setData(Text:string);
function getData:string;
end;
:

und so gehts...

Delphi-Quellcode:
procedure Fenster;
var Fenster:TFenster;
    Data:string;
begin
  Fenster:=TFenster.create(Self, SQLConnection);
  try
    Fenster.setData('hier sind die Daten für das Fenster');
    if Fenster.showmodal = mrOK then begin
      Data:=Fenster.GetData; //und hier kommen die Daten aus dem Fenster zurück
    end;
  finally
    Fenster.release;
  end
end;
so kannst du alles machen, was du möchtest. Diese Vorgehenweise ist zukunftssicher. Du kannst unendlich viele Fenster realsieren. Die Kommunikation untereinander ist genau festgelegt, es gibt keine globalen Variablen, es wird nur soviel Speicher benutzt, wie gerade benötigt wird.
was willst du noch?

So, ich denke ich habe jetzt genug auf dich eingeredet, wenn du es immer noch nicht einsiehst, dann kann ich es auch nicht ändern. Mehr als dir diese Ideen an die Hand geben kann ich nicht. Oder wie mein alter Lehrer immer sagte: Nimm es einfach an.
Warum das Rad neu erfinden, andere haben sich da schon viel Mühe gegeben, um uns solche schönen Möglichkeiten an die Hand zugeben.
Benutze sie doch einfach.

MfG
Thorsten
  Mit Zitat antworten Zitat