![]() |
Kommunikation zwischen zwei Anwendungen/Fenstern
Hallo,
ehrlich gesagt, kann ich mein Problem / meine Frage nicht genauer stellen, weil ich noch nicht den Weg des (steinigen) Pfades kenne. Ich habe eine Form, mit dessen Hilfe man eine Datenbank erstellen kann. Sofern dies geschehen ist, wird der Datenbankname in eine Datei geschrieben und es soll eine zweite Form geöffnet werden. Auf dieser sollen die in der Datenbank enthaltenen Tabellen und die -Definitionen ersichtlich und modifizierbar sein. Das erst beschriebene Formular ist das, was standardmäßig von Delphi erstellt wird, sofern man eine VLC-Anwendung erstellt, das zweite eine hinzugefügte Form. Nachdem die Datenbank erstellt und in die Datei geschrieben wurde, soll sich das erste Fenster schließen. Das zweite kann ja aber nur angezeigt werden, sofern die (Haupt-)Form öffnen ist. Erstelle ich also zwei unterschiedliche Anwendungen oder gibt es noch eine andere Möglichkeit, eine Form aufzurufen / zu definieren ohne dass die zweite an der ersten gekoppelt ist? Wenn ich zwei Anwendungen erstelle und die zweite über das erste Programm aufrufe: wie kann ich dann dem zweiten Programm mitteilen, wo die eben erstellte Datei liegt, damit die zweite Applikation damit arbeiten kann? Ich hoffe, es war ein bisschen verständlich, wenn nicht, werde ich das eine oder andere genauer erklären. mfg. |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Du kannst bei einem formular mit Formular.visible bestimmen ob es angezeigt wird. Das geht auch für das Hauptformular. Bevor du dein zweites Formular anzeigst sollte es eigentlich möglich sein über .visible dieses auszublenden
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Daran habe ich auch schon gedacht und es ausprobiert. Der Nachteil daran ist jedoch, dass das Icon aus der Taskleiste verschwindet.
Schließt man nun das zweite Formular, ist der Prozess des Programms ja immer noch offen. Natürlich könnte man das OnClose-Ereignis auswerten, aber es gefällt mir schon nicht, dass das erste Formular im Hintergrund offen bleibt und unnötig Speicher frisst. Es muss eine elegantere Lösung geben! |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Wieso elegantere Lösung? So funktionieren (fensterorientierte) Windows-Programme nunmal.
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Du könntest Dein Mainform auch leer lassen und die benötigten Forms ohne Rand erzeugen, Ihnen Mainform als Parent setzen, align alClient und das welches Du nicht mehr brauchst frei geben und ein anderes laden.
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Zitat:
Kann man denn das Icon der Taskleiste nicht eingeblendet lassen? |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Ab Delphi 2007 gibt es die Property TApplication.MainformOnTaskbar, die ist AFAIK dafür zuständig. Ansonsten muss man halt ein wenig nachhelfen(ich denke mit ShowWindow, bin aber gerade zu faul zum Nachsehen).
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Man könnte auch ein PageControl zum umschalten nutzen und dessen Register ausschalten.
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Also mit TApplication.MainformOnTaskbar on Taskbar klappt nicht. Ich habe die Eigenschaft swohl auf das Main- als auch auf das zweite Formular angewandt, beides hat nichts genützt.
Und mit ShowWindow habe ich schon folgendes vergebens versucht:
Delphi-Quellcode:
Das mit den PageControl will ich nicht so gerne machen, mir gefällt der Lösungsansatz mit den Ausblenden besser.
ShowWindow(FindWindow('Shell_TrayWnd',nil), SW_SHOWNA);
//Und ShowWindow(Application.Handle, SW_SHOW); |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Zitat:
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Diesen Aufwand halte ich allerdings für etwas übertrieben, sofern ich den Ausgangspost richtig gedeutet habe. Wen juckt es denn, ob da noch ein unsichtbares MainForm im Hintergrund Speicher belegt? Das wird ja wohl kaum im kritischen Bereich liegen.
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Zumal er ja bei dem von mir vorgeschlagenen Web nur das alloziert was er gerade braucht....
|
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Drehe das ganze doch um, dann passt der Schuh auch.
Ich vermute mal, die Hauptaufgabe des Programms besteht darin, eine Datenbank-Struktur zu bearbeiten. Ein weitere implizierte erforderliche Aufgabe ist es eine Datenbankstruktur zu erstellen. Die MainForm heißt MainForm, weil sich um diese MainForm die GUI-Application dreht. Entweder passiert hier die Hauptaufgabe der Anwendung oder steuert mehrere Child-Forms (MDI-Anwendung z.B. Word). Wenn also in deinem Falle keine Datenbank da ist, muss eine angelegt werden. Das Bearbeiten der Datenbank erfolgt somit in der MainForm. Hier wird auch geprüft, ob die Datenbank existiert (die muss ja von irgendwo geladen werden). Stellt man jetzt fest, da gibt es keine Datenbank, dann wird die Form zur Erstellung der Datenbank aufgerufen. |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
das erste programm kann doch den Dateinamen als Parameter beim programmaufruf des zweiten programmes übergeben..
' winexec(pchar('prog2.exe dateiname'),0) ' |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Danke für die vielen Antworten.
Ich werde es machen, wie es Sir Rufo vorgeschlagen hat. Das ist logisch, plausibel. Ich hätte es von Anfang an so machen müssen, Sir hat es richtig erkannt: "Ich vermute mal, die Hauptaufgabe des Programms besteht darin, eine Datenbank-Struktur zu bearbeiten." Ich müsste also so oder so umstellen, und das sich das Problem mit den Fenstern dadurch löst, ist ein netter und gewünschter "Nebeneffekt". |
AW: Kommunikation zwischen zwei Anwendungen/Fenstern
Zitat:
Mache die Form zum Bearbeiten einfach über die Projekt-Optionen zur MainForm. Dann noch ein wenig Code dazu und es sollte fertig sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz