Einzelnen Beitrag anzeigen

Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#5

Re: Form anderer Anwendung in Hauptanwendung einbinden

  Alt 31. Aug 2006, 11:20
Unten mein Lösungsansatz für das Problem, genaugenommen die Vorgehensweise bei meinem Problem.

Ich habe während des Schreibens Dein Posting (@Der_Unwissende) gesehen und antworte deshalb schon hier:

@Der_Unwissende
Kurz: Mir ist es unangenehm, das so ein triviales Problem (in meinen Augen) Dich so bemühnen musste.
Daher meine nicht so glückliche Reaktion. Inwieweit Du so freundlich bist und es so ausführst, liegt natürlich im Ermessen und der Zeit des Beantworters. Ich bin jedenfalls froh darum (wenn es nicht gerade so eine profane Frage meinerseits ist.) So kurze Anworten mit: Gugst Du da und Tschüss... sind mehr oder weniger hilfreich, je nach Fragestellung. Gut ist es, wenn man hinterfragt, was der Fragesteller wirklich möchte, damit man konkret anworten kann.
Letztlich ist es mir lieber, wenn ich alles ein wenig ausführlicher aufschreibe und davon ausgehen kann, dass der Fragende auch davon profitiert (in dem er etwas dazu lernt) oder auch mir eine andere Sicht auf das gleiche Problem und Denkfehler meinerseits zeigt. Wenn ich dazu ein zwei Sätze mehr brauche ist das doch ok. Absolut ok. Wir profitieren in der DP alle davon, einschließlich ich!

Dass ich erwähnen sollte, dass ich zu einem Thema gesucht habe, sollte ich eigentlich nach einiger Zeit hier in der DP wissen. Andererseits kennen die DauerUser noch schon, das ich irgendwo an etwas manchmal hänge, wo F1 und die DP-Hilfe nicht hilft. Stichwort: Button.enabled/Button.visible ist ein Beispiel...

Zitat:
So, damit ist auch dieser Beitrag lang genug. Jedenfalls solltest du das hier Geschriebene nur als Anregung verstehen. Ich möchte weder sagen, dass dein Beitrag völlig unverständlich war, noch dir Vorschriften machen oder sagen, dass ich mit allem richtig liege!
Ich hoffe nur, dass du aus den Antworten, die dir Leute so geben auch mehr mitnimmst als die Lösung des Problems. Schau dir einfach immer von allen die Antworten an, die du gut findest. Dann merkst du vielleicht schnell, warum die besonders gut sind und lässt das in alle Beiträge einfliessen (sowohl Fragen als auch Antworten).
Na, so habe ich Dich auch bisher immer verstanden!
Zitat:
Davon profitiert wieder die gesamte DP und dafür ist sie doch da. Nicht für eine Zeitersparnis von 4-6 Std. (deren Angabe natürlich pauschal falsch ist, da du ohne 4-6 Std. Suche nicht weißt ob sich dein Problem in der Zeit hätte lösen lassen )
Jetzt habe ich es in 3 Std. geschafft...

Also, hier die Lösung von einem Anfänger:

Ich möchte die Form Einstellungen.pas bei mir einbinden, die ich in einer zweiten Anwendung verwendet habe. (Genaugenommen habe ich versehentlich eine "Anwendung" mit Form erstellt, statt nur "Form")

Im Hauptprogramm Watch2006, in dem ich die Form einbinden möchte, steht schon eine Unit/Form namens "Watch2006U.pas" drin, die uns aber nicht weiter interessieren sollte:
Delphi-Quellcode:
program Watch2006;
uses
  Forms,
  Watch2006U in 'Watch2006U.pas{Form1};
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Sinnvoll ist nun, lt. User "Der_Unwissende", die neue Form, die bei mir Einstellungen.pas heißt, einzubinden. Dies machen wir im Editor mit "Dem Projekt hinzugügen" (UMSCH+F11) und wählen die Einstellungen.pas aus. Wir kommen automatisch in den Code von Einstellungen.pas und schalten via STRG+F12 auf unser Hauptprogramm um. Da steht nun:
Delphi-Quellcode:
program Watch2006;
uses
  Forms,
  Watch2006U in 'Watch2006U.pas{Form1},
  Einstellungen in 'Einstellungen.pas{Form2};//automatisch ergänzt.
{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2); //automatisch ergänzt.
  Application.Run;
end.
Aha! Der Vorteil ist, das die Form Einstellungen.pas korrekt eingebunden wird. (Evtl. mit vollständigen Pathnamen, ich denke immer dann, wenn die FormUnit nicht im Suchpath vom Compiler ist.)
Und die bezeichnung TForm2, Form2 wird verwendent. Darüber zerbach ich mir den Kopf, wie ich es manuell einfügen sollte. So macht es der Compiler. Ganz easy!

Nun zum nächsten Schritt:
Benennen wir
Delphi-Quellcode:
type
  TForm1 = class(TForm)
  //in
  TForm2 = class(TForm)
  //um
  und
var
  Form1: TForm1;
  //in
  Form2: TForm2;
  //um.
als logische Schlussfolgerung der zeile Application.CreateForm(TForm2, Form2); //automatisch ergänzt. die uns der Compiler angelegt hat.

Ich nehme es mal vorweg: Benenne alle Form1.Procedure etc. in der Unit Einstellungen.pas in Form2.procedure um. Denn sonst versucht Ihr in der Form1 Proceduren/Funktionen aufzurufen, die da nicht vorhanden sind.

Jetzt compilieren wir mal! Wenn der Code im Einstellungen korrekt geändert wurde, werdet Ihr mit "[Fehler] WARNING. Duplicate resource(s)" belohnt! Grrrrr.
Was ist denn nun los? OK, ich kann Euch verraten, dass der Code soweit ok ist. Wir müssen nun die Datei "Einstellungen.dfm" mal ansehen. Da steht ganz oben schon:
Delphi-Quellcode:
object Form1: TForm1
  Left = 192
  Top = 107
  Width = 259
  Height = 353
  Caption = 'Einstellungen'
So kann das nicht funktionieren: Das steht ja Form1:TForm1 drin!
Ächs. Also Hand anlegen und ändern in: Form2:Tform2. Ich glaube, mehr ist da nicht zu machen.
Compilen und siehe da: Es funzt!
Nun mal ein Button einfügen und ein Form2.show reinschreiben, Prog. starten und es klappt.

So, das war ein Änfängerhinweis. Besser weiss ich es nicht. Vielleicht hilft es Euch ja weiter.
Besser ist natürlich eine Unit dem Projekt hinzuzufügen, als einen solchen Handstand zu machen!

Happy Coding wünscht Euch
Go2EITS
  Mit Zitat antworten Zitat