Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Kommunikation zwischen zwei Anwendungen/Fenstern (https://www.delphipraxis.net/155943-kommunikation-zwischen-zwei-anwendungen-fenstern.html)

Mysterio08 14. Nov 2010 13:52

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.

SirThornberry 14. Nov 2010 13:57

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

Mysterio08 14. Nov 2010 15:37

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!

DeddyH 14. Nov 2010 16:18

AW: Kommunikation zwischen zwei Anwendungen/Fenstern
 
Wieso elegantere Lösung? So funktionieren (fensterorientierte) Windows-Programme nunmal.

Bummi 14. Nov 2010 16:27

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.

Mysterio08 14. Nov 2010 16:58

AW: Kommunikation zwischen zwei Anwendungen/Fenstern
 
Zitat:

Zitat von DeddyH (Beitrag 1061426)
Wieso elegantere Lösung? So funktionieren (fensterorientierte) Windows-Programme nunmal.

Mag sein, aber ich habe noch nie eine Applikation gesehen, wo das Icon in der Taskleiste verschwindet und man, abgesehen von der Form (die man ja auch minimieren kann), nur noch im TaskManager sieht, dass die Anwendung offen ist.
Kann man denn das Icon der Taskleiste nicht eingeblendet lassen?

DeddyH 14. Nov 2010 17:06

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).

stahli 14. Nov 2010 17:07

AW: Kommunikation zwischen zwei Anwendungen/Fenstern
 
Man könnte auch ein PageControl zum umschalten nutzen und dessen Register ausschalten.

Mysterio08 15. Nov 2010 16:04

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:
ShowWindow(FindWindow('Shell_TrayWnd',nil), SW_SHOWNA);
//Und
ShowWindow(Application.Handle, SW_SHOW);
Das mit den PageControl will ich nicht so gerne machen, mir gefällt der Lösungsansatz mit den Ausblenden besser.

Luckie 15. Nov 2010 18:35

AW: Kommunikation zwischen zwei Anwendungen/Fenstern
 
Zitat:

Zitat von Mysterio08 (Beitrag 1061399)
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?

Mit der Nachricht WM_COPYDATA zum Beispiel.

DeddyH 15. Nov 2010 18:41

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.

Bummi 15. Nov 2010 19:26

AW: Kommunikation zwischen zwei Anwendungen/Fenstern
 
Zumal er ja bei dem von mir vorgeschlagenen Web nur das alloziert was er gerade braucht....

Sir Rufo 15. Nov 2010 23:22

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.

wolfgang_SV 16. Nov 2010 15:18

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) '

Mysterio08 16. Nov 2010 16:17

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".

Sir Rufo 16. Nov 2010 16:19

AW: Kommunikation zwischen zwei Anwendungen/Fenstern
 
Zitat:

Zitat von Mysterio08 (Beitrag 1061970)
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".

Viel brauchst du ja auch gar nicht umzustellen.
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