![]() |
Form zu einer "Gruppe" zuweisen?
Hi,
Nach längerem suchen ohne Erfolg, gebe ich hiermit auf und stelle erneut einen noobigen Thread. Ich habe ein Fenster erstellt. Dieses Fenster ist mein "Mainform". So. Nun möchte ich ein zweites Fenster erstellen was zu dieser Gruppe hinzugefügt wird. Also z.B. wenn man dass MainFnester schließt, schließt sich das andere Fenster auch. Halt ein Hauptfenster. Nur mein Problem ist, dass ich nicht weiß wie ich das andere Fenster zu dem Mainfenster hinzuufügen soll? Ich habe versucht beim erstellen des Fensters einfach den Handel dabei anzugeben. Doch irgendwie wird das Fenster noch in der Taskleiste angezeigt was es eigentlich nicht dürfte. Außerdem bleibt das Fenster offen wenn man das Hauptfenster schließt. Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Das Schließen mußt du schon selber und explizit machen. Also zB vom ersten das zweite Fenster schließen.
|
Re: Form zu einer "Gruppe" zuweisen?
Hi,
hmm. Okay. Trodzdem weiß ich aber noch nicht wie ich das andere Fenster zu einer Gruppe machen soll. :gruebel: Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Zitat:
|
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Also ich nehme mal Delphi als beispiel. Bei Delphi sind ja mehrere Fenster. Zum beispiel einmal ein Form oder halt der Object Inspector... Doch unten in der Leite siehst du ja nur ein Programm. Delphi. Normaler weise sind dann ja drei Fenster zu sehen weil die ja eigeständig sind. Aber das Programm wird unten als ein ganzes angezeigt und wenn man oben die Hauptleiste schließt, schließen sich auch automatisch alle anderen Fenster. Da ich ja alles aus einer DLL hole ist es ja nicht so... Mfg |
Re: Form zu einer "Gruppe" zuweisen?
In der Titelleiste schließt du das MainForm (ist glaub ich bei Delphi die Menuleiste oben...). Wenn das MainForm geschlossen wird, ist das Programm geschlossen. Und dabei werden ALLE Fenster geschlossen, die zu deinem Programm gehören.
|
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Ja. Aber ja nicht wenn ich eine DLL erstelle und die dann in einer anderen Programmiersprache öffne. Dort sind dann zwei Fenster aufgelistet. Auch wenn ich ein Projekt als "Form" öffne gehts auch so.Ich brauche halt einen Befehl oder einen Parameter wo das halt sozusagen Manuell geht. Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Falls du nicht scheust, das von Hand zu machen, nimm den folgenden Code. Beide Fenster werden zusammen geöffnet, sind zusammen aktiv und werden zusammen minimiert. Weitere Dinge kannst du ja selbst einbauen.
Delphi-Quellcode:
-------------------------------------------
unit Unit1;
interface uses Windows, SysUtils, Classes, Forms, Dialogs, StdCtrls, Controls, Messages; type TForm1 = class(TForm) procedure FormActivate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public procedure Minimieren(var M: TMessage); message WM_NCLBUTTONDOWN; end; var Form1: TForm1; implementation {$R *.DFM} uses Unit2; procedure TForm1.FormActivate(Sender: TObject); begin sendmessage(Form2.handle, WM_NCACTIVATE, 1, 0); end; procedure TForm1.FormShow(Sender: TObject); begin Form2.show; end; procedure TForm1.FormCreate(Sender: TObject); begin Application.Title := 'Gruppe W1'; Caption := Application.Title; end; procedure TForm1.Minimieren(var M: TMessage); begin DefaultHandler(M); if M.WPARAM = HTREDUCE then Form2.windowstate := wsminimized; end; end. -------------------------------------------------------------- unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm2 = class(TForm) procedure FormActivate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public procedure CreateParams(var Params: TCreateParams); override; procedure Minimieren(var M: TMessage); message WM_NCLBUTTONDOWN; end; var Form2: TForm2; implementation {$R *.DFM} procedure TForm2.FormActivate(Sender: TObject); begin sendmessage(Application.Mainform.handle, WM_NCACTIVATE, 1, 0); end; procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.WndParent := GetDesktopWindow; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Application.MainForm.close; end; procedure TForm2.FormCreate(Sender: TObject); begin Caption := 'Gruppe W2'; end; procedure TForm2.Minimieren(var M: TMessage); begin DefaultHandler(M); if M.WPARAM = HTREDUCE then Application.minimize; end; end. Gruß DBR [edit=alcaeus]Delphi-Tags eingefuegt. In Zukunft bitte selbst machen. Mfg, alcaeus[/edit] |
Re: Form zu einer "Gruppe" zuweisen?
Das in der Taskleiste ist ein Fenster (Application.Handle) welches du sonst garnicht zu sehen bekommst. Es hat nichts mit den Forms (wieviele auch immer) zu tun.
Der Grund warum es in der Taskleiste angezeigt wird ist, daß der Stil WS_EX_APPWINDOW gesetzt ist. |
Re: Form zu einer "Gruppe" zuweisen?
Hi,
hmm. Danke aber so wichtig ists dann doch nicht. Ich habe auch mal versucht nochmal mit handel.Parent das Fenster zu dem Mainfenster hinzuzufügen doch dann ist das Fenster in dem anderem Fenster und das will ich ja nicht. Naja. Egal. Trodzdem danke nochmal. Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Ähem ... machst du das hier nur als Beschäftigungstherapie für uns, oder eigentlich für dich? In letzterem Fall solltest du versuchen hartnäckig zu bleiben. Das hilft immer am besten um neues zu lernen.
|
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Okay. Du hast recht. Nur mein Problem ist, dass ich nix versteh von dem Code der oben gepostet wurde. Könnte mir nicht wenigstens einer die Stelle markieren wo odas abläuft der wie das Funktioniert? Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Was genau am Code verstehst du nicht?
Leicht OT (aber eventuell nötig): Also, mal ein paar Grundlagen zu einem Forum. Keine Angst, habe dein Alter zur Kenntnis genommen, nimm es mir nicht krumm, wenn nicht alles sanft genug rüberkommt. In einem Forum helfen dir Leute freiwillig. Meistens haben diese Leute noch andere Dinge zu tun (zB könnten sie beruflich mit Delphi zu tun haben). Daher solltest du deine Frage präzise stellen. Sie sollte auch mehr dein Ziel (in verständlichen Worten) beschreiben, als das was du bereits getan hast. Wenn Details deiner aktuellen Implementierung benötigt werden, wirst du danach gefragt werden. Ansonsten wird man dir (meistens) eine zielgerichtete Antwort geben. Ohne das Ziel zu kennen, kann man als alter Hase zwar mutmaßen, aber das war's auch schon. Außerdem setzen wir voraus, daß du deine "Hausaufgaben" machst. Wenn du also sagst, daß du den kompletten Code oben nicht verstanden hast, solltest du dich nochmal reinvertiefen. Wenn du Bücher zum Lernen brauchst, kann man sicher auch was machen, selbst wenn du keine Bibliothek in deiner Nähe hast. Übrigens: wenn dein Alter stimmt, so fällt mir schonmal deine Rechtschreibung äußerst positiv auf. Es gibt hier Erwachsene, die pro Satz mehrere Fehler machen (ich rede mal nicht von neuer vs. alter Rechtschreibung ;)). PS: Wenn du also ein Buch brauchst, so könnte ich dir zB vermutlich ein Delphi-4-Buch (D6 habe ich auch noch) ausleihen. |
Re: Form zu einer "Gruppe" zuweisen?
Hi Olli,
ich bin nicht das erste mal in einem Forum. Trodzdem danke das du mich sozusagen einweißt. ;) Also. Ich verstehe den Code wohl oben. Was ich nur ausdrücken wollte, war das ich nicht die Stelle finde wo das Passiert was ich möchte. Also halt eine Gruppeneinteilung der beiden Fenster. Du sagtes oben auch schon das der Stil WS_EX_APPWINDOW dran Schuld wäre ob das Fenster in der Taskleiste angezeigt wird oder nicht. Nur leider sehe ich in dem Code, der oben angezeigt wurde, keine Stelle wo das drin vorkommt. Somit hast du mich glaub ich ein wenig verwirrt. ;) Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Zitat:
Zitat:
Dir geht es doch im Grunde darum, daß nur ein Fenster in der Taskleiste angezeigt wird, selbst dann wenn du andere Forms erstellst? Oder reden wir über nonVCL. Das kam in deiner Fragestellung nämlich noch nicht zu Wort. |
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Also das ganze ist nonVCL soweit ich das beurteilen kann. :) Ich habe halt eine DLL und dort ist eine function. Ich rufe also mit der anderen Programmiersprache diese function auf. Bei dem Aufrufen übergeb ich noch Breite, höhe, x, y, groupe. Die Gruppe soll halt bewirken dass man mehrere MainFenster erstellen kann. Den Code habe ich schon ausprobiert. Ich habe ihn auch schon mehrfach analisiert. Doch ich finde halt nicht die Stelle oder den Befehl der das bewirkt. Vllt fehlt mir ja wirklich das Hintergrundwissen. :gruebel: Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Zitat:
Was ist bei dir ein "MainFenster"? Habe ich richtig verstanden, daß du folgendes willst: - Wird ein MainFenster geschlossen, wird die Anwendung beendet - Alle MainFenster erscheinen auf der Taskleiste ??? |
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Du kannst MainFenster erstellen. Und du kannst ein Fenster zu diesem MainFenster hinzufügen. Wenn also ein Mainfenster geschlossen wird, wird nur das Mainfenster und die Fenster die zu dem MainFenster zugeordnet wurden geschlossen. Dazu gehört aber auch noch, dass die Fenster, die zu dem Mainfenster zugeordnet wurden, nicht in der Taskleiste angezeigt werden. Es werden also nur die Mainfenster in der Taskleiste angezeigt. Das ist eigentlich alles. :) // Edit Die Groupen sind nur imaginär. Also sind sozusagen von mir erfunden. :) Mfg |
Re: Form zu einer "Gruppe" zuweisen?
|
Re: Form zu einer "Gruppe" zuweisen?
Hi,
hmmm. Wie genau funktioniert das und wie genau gehe ich damit um? Sorry aber darin bin ich absoluter vollnoob. Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Zitat:
1. Hast du ShareMem im Hauptprogramm und in der DLL als aller erste Unit in der .dpr Datei eingefügt? (Wenn nicht kracht es irgendwann während das Programm läuft) 2. Du erstellt das zweite Formular in der DLL mit Hilfe dieser Funktion? Oder ist der DLL-Code nicht von dir und du willst ihn nur nutzen? Wenn du die Macht über den DLL-Code hast, dann kannst du das Formular (sofern VCL) in die Hauptanwendung einfügen, indem du vor dem Erzeugen des Formulars das Application.Handle auf die der Hauptanwendung setzt.
Delphi-Quellcode:
Stammt das Formular nicht von dir, oder ist kein VCL Formular dann kannst du es an die Anwendung ankoppeln mit
function CreateDllForm(AppHandle: THandle): TForm;
begin Application.Handle := AppHandle; Result := TMyForm.Create(Application); end;
Delphi-Quellcode:
SetWindowLong(w, GWL_HWNDPARENT, Application.Handle);
|
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Also. Es gibt kein Hauptprogramm und es gibt auch keine unit. Es gibt nur die DLL wo alle Fenster erstellt werden und dann nachher in der anderen Programmiersprache geladen werden. Deswegen werden auch alle Fenster in der DLL erstellt. Das heißt es müsste die erste Variante klappen. Ich probiers also mal aus. danke. :) Mfg |
Re: Form zu einer "Gruppe" zuweisen?
Hi,
hmm. Irgendwie klappt alles nicht. Ich hab jetzt mal nen Beispiel gemacht. Vllt bringt das ja was?
Delphi-Quellcode:
Mfg
library Gruppe;
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; var Form1, Form2: TForm; {$R *.res} procedure CreateDllForm; stdcall; begin Form1 := TForm.Create(Application); Application.Handle := Form1; Form2 := TForm.Create(Application); end; procedure CreateForm; stdcall; begin Form1 := TForm.Create(Application); Form2 := TForm.Create(Application); SetWindowLong(Form1, GWL_HWNDPARENT, Application.Form2); Form1.Show; Form2.Show; end; exports CreateForm, CreateDLLForm; begin end. |
Re: Form zu einer "Gruppe" zuweisen?
Du hast wohl nocht nicht den Unterschied zwischen Handle und Form herausgefunden. Wenn dann schon Form.Handle benutzen, auch wenn es dann trotzdem falsch ist.
In deinem Fall rate ich statt "Form1 := TForm.Create(Application)" zu "Application.CreateForm(TForm, Form1)" denn damit weiß die Anwendung, dass das erste Formular als Hauptfenster zu betrachten ist. Der SetWindowLong brauchst du dann nicht mehr. |
Re: Form zu einer "Gruppe" zuweisen?
Hi,
Hui. Jetzt klappts. Recht herzlichen dank. :) Mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 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