Autor |
Beitrag |
Hrtgpdh
Hält's aus hier
Beiträge: 14
WIN2000, WINXP, Linux, WIN7, WIN8
Delphi7, Delphi2010, VS2003, VS2005, VS2008, VS2012, Eclipse
|
Verfasst: Di 20.09.05 08:43
Hallo,
ich möchte gerne in einer Anwendung ein Fenster, (mit dem ich Projekte) bearbeiten kann, mehrfach instanziieren können. (Um gleichzeitig mehrere Projekte öffnen, und bearbeiten zu können).
Ich kenne das entsprechend aus anderen OOP- Sprachen und habe es in auch hier in Delphi versucht, bekomme dann aber immer Compiler- Fehlermeldungen.
D.h. ich habe in meinem Main- Formular mehrere identische Klassen- Variablen deklariert
Bsp.
Projekt1 : FrmProjekt;
Projekt2 : FrmProjekt;
Projekt3 : FrmProjekt;
und versuche die mit Create zu erschaffen, aber dann s.o..
Besser wäre es näturlich noch, wenn ich zur Laufzeit nur eine Klassen- Variable hätte die ich immer wieder neu instanziieren könnte, aber da habe ich im Moment keine Idee wie das funktionieren könnte.
Ich benutze Delphi 7 Professional, und mich würde interessieren ob und wie das funktioniert, bzw. auch ab welcher Delphi- Version?
Danke für eure Hilfe
Gruß Hartwig
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 20.09.05 09:45
1.) Form1: TFrmProjekt; und 2.) schreibst du nicht über deinen Konstruktoraufruf... Delphi-Quelltext 1: 2: 3:
| Application.CreateForm(TFrmProjekt, Form1); Form1.ShowModal; FreeAndNil(Form1); | funktioniert bei mir nämlich wunderbar (sofern TFrmProjekt existiert).
AXMD
|
|
Hrtgpdh 
Hält's aus hier
Beiträge: 14
WIN2000, WINXP, Linux, WIN7, WIN8
Delphi7, Delphi2010, VS2003, VS2005, VS2008, VS2012, Eclipse
|
Verfasst: Di 20.09.05 09:51
Funkioniert leider so nicht, du musst dir vorstellen, das ein Benutzer z.B. ein Projekt bearbeiten will, und dann z.B. Infos aus einem anderen Projekt braucht, oder für einen Kollegen was kontrollieren will, etc. deswegen sollte es möglich sein mehrere Projekt gleichzeitig öffnen zu können.
Mit ShowModal müsstest du das ja dann immer erst das Form schliessen, bevor du ein neues öffnen kannst, wenn ich das richtig im Kopf habe.
Gruß Hartwig
|
|
AXMD
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: Di 20.09.05 09:54
War auch nur ein Beispiel... nimmst du stattdessen halt Show  . Nur freigeben musst dus wieder
AXMD
|
|
Hrtgpdh 
Hält's aus hier
Beiträge: 14
WIN2000, WINXP, Linux, WIN7, WIN8
Delphi7, Delphi2010, VS2003, VS2005, VS2008, VS2012, Eclipse
|
Verfasst: Di 20.09.05 10:30
Das Problem ist nur wenn ich die Instanz mit free wieder freigebe, sind alle alten Inhalte auch weg, und evt. möchte dann ja jemand an dieser Stelle weiterarbeiten.
Ich suche nach einer Option, wie z.B. in C++ bzw, in Java, wo ich die Möglichkeit habe
(Java- Code:)
Quelltext 1: 2: 3:
| JFrame Fenster1, Fenster2; Fenster1 = new JFrame(); Fenster2 = new JFrame(); |
oder auch
mit anderen Konstruktoren (z.B. die Nr. des Projektes) und nur eine offizíelle Deklaration
Quelltext 1: 2: 3:
| JFrame Fenster; Fenster = new JFrame(1); Fenster = new JFrame(2); |
Dann weiß ich das ich zwei gleiche Fenster mit unterschiedlichen Inhalten bekomme.
Ich bin im Moment der Meinung, das ich hier z.B. 5 Forms aufbauen müsste und dann die Verwaltung der Forms bzw. die Organisation im Hintergrund könnte ziemlich komplex werden.
Gruß Hartwig
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 20.09.05 11:24
Hallo,
dann solltest du das Form erst beim Schließen deiner Anwendung frei geben, vorher kannst du es mit Hide verstecken und mit Show wieder anzeigen.
Du kannst natürlich auch bei Formularen den Constructor überschreiben und somit andere Parameter übergeben. Ich nehmen an dann kannst du es nicht mehr mit CreateForm erzeugen, aber letzendlich sind auch Forms nur Objekte wie alle anderen.
Ein kleines Beipiel: Form1 Besitzt ein Knopf um ein neues Form2 zu erstellen Modal an zu zeigen (dann kann ich den Prozess auf eine Prozedure eindampfen) und es wieder frei zu geben. Form2 Besitzt einen neuen Construktor und einen Button der das Modale Fenster weider schließt.
Die Unit für Form 2 sieht so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm2 = class(TForm) Button1: TButton; Shape1: TShape; procedure Button1Click(Sender: TObject); private public constructor Create(AOwner: TComponent; aCaption : string); end;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject); begin ModalResult := mrCancel; end;
constructor TForm2.Create(AOwner: TComponent; aCaption: string); begin inherited Create(aOwner); self.Caption := aCaption; end; end. |
und die Auftufende Funktion aus Unit1 so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button1Click(Sender: TObject); var MyForm : tForm2; begin MyForm := tForm2.Create(self, 'Fenstertitel'); MyForm.ShowModal; MyForm.Free; end; |
Gruß
Klabautermann
|
|
Hrtgpdh 
Hält's aus hier
Beiträge: 14
WIN2000, WINXP, Linux, WIN7, WIN8
Delphi7, Delphi2010, VS2003, VS2005, VS2008, VS2012, Eclipse
|
Verfasst: Di 20.09.05 14:59
Merci, dann probier ich es mal auf diese Weise, ich lass es euch wissen ob es funktioniert hat.
Gruß Hartwig
|
|
Hrtgpdh 
Hält's aus hier
Beiträge: 14
WIN2000, WINXP, Linux, WIN7, WIN8
Delphi7, Delphi2010, VS2003, VS2005, VS2008, VS2012, Eclipse
|
Verfasst: Do 22.09.05 16:57
Nochmals Merci, ich konnte meine Problemstellung auf diese Art lösen, und die Anwendung verhält sich sehr gut.
Gruß Hartig
|
|
|