AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

form - verhalten / showmodal

Ein Thema von benicz · begonnen am 29. Jul 2006 · letzter Beitrag vom 29. Jul 2006
Antwort Antwort
benicz

Registriert seit: 29. Jul 2006
15 Beiträge
 
#1

form - verhalten / showmodal

  Alt 29. Jul 2006, 16:05
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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: form - verhalten / showmodal

  Alt 29. Jul 2006, 16:13
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
  Mit Zitat antworten Zitat
benicz

Registriert seit: 29. Jul 2006
15 Beiträge
 
#3

Re: form - verhalten / showmodal

  Alt 29. Jul 2006, 16:27
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...
  Mit Zitat antworten Zitat
benicz

Registriert seit: 29. Jul 2006
15 Beiträge
 
#4

Re: form - verhalten / showmodal

  Alt 29. Jul 2006, 16:43
hier der code (nur relevante befehle):

Delphi-Quellcode:
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;
bevor ich jetzt noch länger dransitze und keiner antworten kann, poste ich mal...

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!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: form - verhalten / showmodal

  Alt 29. Jul 2006, 17:31
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
  Mit Zitat antworten Zitat
benicz

Registriert seit: 29. Jul 2006
15 Beiträge
 
#6

Re: form - verhalten / showmodal

  Alt 29. Jul 2006, 17:38
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...
  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 19:49 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