![]() |
form - verhalten / showmodal
Hallo!
folgende situation: ich schreibe ein programm, das auf midi-events ragiert. es gibt mehrere forms, die (wie die IDE es so macht) alle bei programmstart created werden. im hauptformular gibt es einen menüpunkt, der ein zweites formular modal anzeigt. die prozedur, die midi-events behandelt, tut das gleiche. (soll es zumindest...) zuerst habe ich einfach die onclick-routine des menüpunktes aufgerufen, aber das hat nicht zum richtigen ergebnis geführt. deshalb habe ich alle sachen, die erledigt werden müssen, in eine eigene funktion im zweiten formular gepackt, die dann an beiden stellen (onclick und midikram) identisch aufgerufen wird. das problem: das öffnen übers menü klappt vom feinsten, per midi öffnet sich das fenster zwar, aber geht nicht wieder zu! erläuterung zum midi-fall: beim öffnen hat das zweite form nicht den fokus (der rahmen des fensters sagt mir das zumindest...) im zweiten form gibt es einen button, der ein paar sachen macht und dann close aufruft. die onclick-prozedur des knopfes läuft im stepping-modus (mitF7) auch brav durch, aber er scheint das close zu ignorieren... ein weiteres phänomen: die prozedur, die midi-events behandelt generiert (bei einem anderen event) auch den druck auf die enter-taste (keybd_event). das funktioniert aber im zweiten form nur, wenn ich es übers menü öffne. wow! ist ganz schön lang geworden, ich hoffe, dafür steht wenigstens alles drin... disclaimer: ;-) ich habe nach bestem gewissen erfolglos in foren und beiträgen gesucht, was in meinen augen diesen thread rechtfertigt! besten dank schonmal für alle antworten! |
Re: form - verhalten / showmodal
Herzlich willkommen in der Delphi-PRAXiS, benicz.
Ein modales Form schließt du durch Zuweisung an die property ModalResult. Und ein Form per ShowModal aus einem midi event handler heraus anzuzeigen - ob das so gut ist? Freundliche Grüße vom marabu |
Re: form - verhalten / showmodal
das midi-event wird von einem gerät erzeugt, das ich als eine art hardware-interface für mein programm baue, von daher:
unbedingt! ;-) ja, das mit dem modalresult hab ich such schon versucht, hat aber am ergebnis nichts geändert... ach ja, was ich doch tatsächlich vergessen habe: dieses zweite fenster erzeugt sozusagen einen datensatz, der hinterher als item in einem treeview im hauptform erscheint. durch doppelklick darauf öffnet sich dann wieder die form. wenn man den datensatz per menü angelegt hat passiert das auch, per midi erstellt stürzt das programm ab... ich habe überlegt, ob es daran liegt, dass ich bei midi ja keinen sender habe, aber mit "Form1" oder "nil" hat's auch nicht geklappt. daraufhin habe ich die show-geschicht komplett isoliert, sodass jetzt der aufruf an beiden stellen exakt identisch ist. ich versuche mal, etwas repräsentativen code zusammenzustricken... |
Re: form - verhalten / showmodal
hier der code (nur relevante befehle):
Delphi-Quellcode:
bevor ich jetzt noch länger dransitze und keiner antworten kann, poste ich mal...
procedure Form1.domidi(const aStatus, aData1, aData2: byte);
begin URemote.doremote(aData1); end; procedure Form1.menucklick; begin Form2.add; end; procedure URemote.doremote(aData1); begin case aData1 of 1: begin Form2.add; // das stammt noch aus der zeit, wo ich mangels sender den focus wieder auf Form1 setzen musste: Form1.SetFocus; Application.ProcessMessages; end; 2: begin keybd_event(VK_RETURN,0,0,0); keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0); end; end; end; procedure Form2.add; begin //dummy erzeugen if (Form2.edit(@dummy)=MROK) then mach weiter else exit; end; function Form2.edit(pointer):integer; begin //setze globalen pointer auf den wert, der übergeben wurde result:=showmodal; end; procedure Form2.btokclick; begin //trage den ganzen kram ein modalresult:=MROK; //oder close, klappt aber auch nicht... end; huch, formatierung wech! dann müsst ihr euch die einschübe denken (oder mir sagen, wie leerzeichen drinbleiben...) [edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit] edit: yepp, danke! |
Re: form - verhalten / showmodal
Tut mir leid, aber da ist nichts in dem von dir gezeigten Code, was ein modales Anzeigen von Form2 in einer Ereignisbehandlungsroutine rechtfertigen könnte. Entweder du hast den wirklich wichtigen Code nicht gezeigt oder ich verstehe einfach nicht. Wenn das Anzeigen von Form2 keine Chance zur Interaktion bietet, dann wäre es besser die Form gar nicht erst anzuzeigen.
marabu |
Re: form - verhalten / showmodal
das "//trage den ganzen kram ein" sollte das, was es sonst noch so macht, ersetzen.
im grunde trägt es die daten, die in der maske (die die form2 darstellt) stehen, in den dummy ein. ist das modalresult OK, dann wird der dummy endgültig eingatragen. das halte ich aber für unwichtig, was mein problem angeht, ich hab halt nur das hingeschrieben, was mit dem öffnen und schließen zu tun hat... modal soll's deshalb sein, damit man immer schön brav nur ein "objekt" ändern und nicht zwischendurch rumpfuschen kann... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 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