AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Form anderer Anwendung in Hauptanwendung einbinden
Thema durchsuchen
Ansicht
Themen-Optionen

Form anderer Anwendung in Hauptanwendung einbinden

Ein Thema von Go2EITS · begonnen am 31. Aug 2006 · letzter Beitrag vom 31. Aug 2006
Antwort Antwort
Go2EITS

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

Form anderer Anwendung in Hauptanwendung einbinden

  Alt 31. Aug 2006, 07:35
Guten Morgen DP!

Ich habe drei verschiedene Forms mit Meldungen erstellt
Leider jeweils als Anwendung und nicht als Formular.

Ich stoppsle hier mit dem Hauptporgramm rum und versuche die Form einzubinden.
Wenn ich die Form einbinden will, sollte ich diese als Form2,Form3,Form4 einbinden.
Aber schon die Umbenennung des Quelltextes z. B. zu Form2 führt zu Fehlern. (Form1 ist mein Hauptprogramm). Die Anzeige erfolgt via Form2.show und Closing mit Form2.close.

Hat jemand einen Ansatz für mich?
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Form anderer Anwendung in Hauptanwendung einbinden

  Alt 31. Aug 2006, 08:31
HI,
ich bin sicher, dass du, da du eigentlich lang genug dabei bist die Suche schon bemüht hast, die hat dir nur nicht geholfen?! Na ja, nach was du gesucht hast muss behälst du einfach lieber für dich, ist ja auch ok. Mit deiner Problembeschreibung sieht es natürlich auch nicht anders aus?
Also ganz ehrlich, etwas mehr zum Problem schreiben wäre mal nicht schlecht! Was benennst du um und warum? Was für ein Fehler tritt dann auf?

Was das anlegen als Anwendung oder als Formular angeht, so liegt der Unterschied nicht da, wo du ihn (denke ich) vermutest. Legst du eine Anwendung an, wird dies als neues Projekt getan. Das heißt du erstellst eine neue Ausführbare Datei, mit einem eigenen Mainform (und den ganzen Einstellungen eines Projektes halt). Das Formular, das aut. mit erzeugt wird verhält sich aber wie ein ganz normales Formular. Lässt du die .dpr aussen vor, hast du hier einfach eine Sammlung verschiedener (mind. ein) Formulare.
Ja, wenn du jetzt Projekt A öffnest und hier Form1 aufgeht, dann ist einer der ersten Schritte (auch wenn es das einzigste Projekt ist) dem Formular einen sinnvollen Namen zu geben. Form1 kann halt alles sein. Gut, du bennenst das Ding im OI um (z.B. in FrmFoo, da es Foo macht). Dann speicherst du die Datei mit "speichern unter" unter einem eben so aussagekräftigen Namen (z.B. UFrmFoo). Nun öffnest du einfach das nächste Formular (nur das Formular/die .pas Datei). Hier benennst du das nächste Formular um (z.B. in FrmBar) und speicherst auch die Datei.
Jetzt hast du Formulare, die alle einen eindeutigen (und sinnvollen) Namen haben. So sollte es immer aussehen, egal ob du ein oder 200 Formulare hast!
Möchtest du jetzt in Projekt A Formulare aus Projekt B verwenden, liegen die wahrscheinlich nicht im selben Ordner. Ist kein Problem, du findest mit Projekt / Hinzufügen (sinngemäß, weiß grade nicht genau wie die Option heißt) die Möglichkeit Dateien dem Projekt bekannt zu machen. Damit werden die Dateien dem Suchpfad deines Projekts hinzugefügt. Jetzt kannst du die Dateien ganz normal mit der uses Klausel hinzufügen.
Auch das Hauptformular lässt sich leicht ändern. Du kannst in den Projektoptionen die Reihenfolge festlegen, in denen die Formulare erzeugt werden. Entfernst du hier ein Formular, so wird dieses auch nicht aut. erzeugt.
Das hier oberste Formular ist aut. das Hauptformular und wird angezeigt, wenn dein Programm gestartet wird.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Go2EITS

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

Re: Form anderer Anwendung in Hauptanwendung einbinden

  Alt 31. Aug 2006, 09:49
@der_Unwissende
Guten Morgen, Du hast mir schon in schwierigen Situationen geholfen! Vielen Dank.
Zitat:
ich bin sicher, dass du, da du eigentlich lang genug dabei bist die Suche schon bemüht hast, die hat dir nur nicht geholfen?! Na ja, nach was du gesucht hast muss behälst du einfach lieber für dich, ist ja auch ok. Mit deiner Problembeschreibung sieht es natürlich auch nicht anders aus?
Also ganz ehrlich, etwas mehr zum Problem schreiben wäre mal nicht schlecht! Was benennst du um und warum? Was für ein Fehler tritt dann auf?
Ich habe nur Delphi2 Handbücher und in der DP mit der Suche nachgesehen. Auch gegoggelt.
Ich glaube der Sinn der DP ist auch, das man nicht 4-6 Std. surfen muss, damit man ein Problem löst. Ein Minimum an Zeitaufwand, das Problem selbst zu lösen, ohne die DP zu bemühnen, ist für mich selbstverständlich.

Wie schon beschrieben, habe ich statt einer "neue Form" eine "Anwendung mit Form" erstellt, die ich in meiner Hauptanwendung nutzen möchte: Eine Antwort wie: "Benenne die Form in der Anwendung in Form2 und rufe in der Hauptanwendung application(tform2,form2) und binde in deiner Hauptform unter Uses Deine Form ein" oder "benenne im Quellcode Tform in tform2 etc., ignoriere die Fehlermeldungen des Compilers", oder "...füge einfach die Meldeform mit "Projekt einfügen" ein", würde mir schon helfen.
- Vorausgesetzt: Es ist so einfach. (Dies war meine Annahme.)

Dass es ein so langes Posting benötigt, wollte ich nicht. Denn dann erstelle ich lieber eine neue Form und binde die Form/unit ein. Da wird die Form vom Editor auch gleich als Form2 richtig deklariert.

So, jetzt gehe ich mal die Schritte von Dir durch. Evtl. versuche ich mal die Meldeformen mit "ins Projekt einfügen" zu integrieren.

Bis später und vielen Dank für Deine Zeit und Mühe!
Go2EITS
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Form anderer Anwendung in Hauptanwendung einbinden

  Alt 31. Aug 2006, 10:51
Zitat von Go2EITS:
Dass es ein so langes Posting benötigt, wollte ich nicht.
Hm, was möchtest du mir denn damit sagen? Dass ich meine Zeit sinnvoller nutzen sollte? Dass du soviel nicht lesen möchtest? Oder was?
Ehrlich, solche Aussagen sind gefährlich, denn das ist die falsche Einstellung. Die DP basiert darauf, dass Leute dir freiwillig antworten, wie lang also die Antwort wird liegt letztlich bei den Autoren. Die Länge hat aber nichts zu sagen. Die kann doch bei mir dadurch zustande gekommen sein, dass ich gerade übe eine Abhandlung zu schreiben, dass einen "Nie unter 1000 Worte"-Fetisch nachgehe oder mich über die Länge von Beiträgen profilieren möchte (natürlich gibt es noch zig weitere Möglichkeiten). Fakt ist, ich fasse mich selten kurz (auch nicht in der DP )
Die länge variiert bei mir (hoffentlich) immer mit der Frage. Ich versuche einfach abzuschätzen mit wem ich es zu tun habe. Klar, ich könnte auch in 3 schritten und 10 Akronymen sagen was ich zu sagen habe, aber wem sagt dass dann etwas? Ich meine ich erlebe es immer wieder, es gibt Kunden die sich ungerne einfach ausdrücken wollen. Die versuchen einfach zu zeigen, dass sie sehr breites Wissen am Rechner besitzen. Letztlich ist mir soetwas egal, gute Software lebt doch nicht zuletzt davon, das sie einfach für jeden zu bedienen ist. Egal, vollkommen anderes Thema.
Das Problem ist jedenfalls vollkommen relevant, denn es kommt immer vor, dass du mit jmd. kommunizierst, den du nicht all zu gut kennst. In der DP ist das ja fast immer der Fall. Du weißt nicht immer, was der andere meint und welches Vorwissen der jenige hat.

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.

Wenn du hier also über den Sinn der DP redest, so denke ich auch hier anders als du (zumindest schreibst). Jedenfalls wurde hier noch nie dem wiedersprochen, dass es sich um eine Community handelt. Das heißt insbesondere, dass alle Leute ihren Teil beitragen. Damit eine solche Community gut funktioniert (in der DP der Fall), müssen natürlich auch ein paar Regeln her, an die man sich halten muss/soll. Natürlich gibt es auch hier keine Kontrolle von jedem Punkt, aber ein paar Punkte zur Orientierung.
So gehört es einfach dazu, dass jmd. der eine Frage stellt vorher auch mal sucht. Ich kann mich nicht an alle Threads erinnern, die ich von dir kenne, von daher beziehe ich mich nur auf diesen hier und dort kann ich halt nicht sagen, dass du nicht gesucht hast. Aber nach deinem ersten Beitrag konnte ich auch das Gegenteil nicht behaupten.
Wenn du also suchst, dann sag das auch, sonst wird nie jmd. etwas davon erfahren. Dann kommen Leute hier vorbei und lesen "hab schon gesucht", bei ein paar Problemen (ich beziehe mich immer noch nicht auf diesen Thread) ist das unglaubwürdig.
Deswegen einfach mal sagen, wonach du schon gesucht hast ohne fündig zu werden. Vielleicht gibt es dann auch schon Tipps, wie du etwas anders suchen (und leichter Dinge finden) kannst. Denn so schnell wie die Suche sind die Antworten nicht.

Es geht hier letztlich um ein paar Zeilen mehr, die man in jede Frage investieren kann, die vieles einfacher machen. Grundlegend kann man dir leichter helfen, desto mehr Information man hat. Ein zuviel gibt es nicht. Die überflüssigen Informationen kann man sehr leicht filtern (überspringen).
Wenn du also dein Problem so gut wie möglich beschreibst ist das immer hilfreich. Es sollte wirklich klar werden, was genau dein Problem ist. Hier geht es hauptsächlich aus dem Titel hervor. Aber wo es kracht, was für eine Fehlermeldung du bekommst oder Ähnliches sehe ich nirgends (vielleicht übersehe ich es auch nur).
Nach der Problembeschreibung (und getrennt von dieser) kannst du sagen, was du schon versucht hast oder was dein Ansatz ist oder aber auch, dass du gar keinen hast. Das alles zeigt nur, dass du auch arbeitest und motiviert sicherlich zusätzlich zu antworten. Wenn du hier etwas erklärst (also auch ein Problem), dann auch immer möglichst einfach. Das hilft einfach Missverständnissen vorzubeugen. Die meisten Probleme entstehen halt immer, wenn zwei Leute denken zu wissen worüber sie reden (ohne zu merken dass jeder etwas völlig anderes meint).

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).
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 )
  Mit Zitat antworten Zitat
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz