Seite 1 von 1

Modales DEWindow über ein DEWindow

Verfasst: Mi, 16. Okt 2013 17:13
von satmax
Ich möchte über ein bestehendes DEWindow (nicht modal, eigener Tread) ein modales DEWindow öfnnen um die Datensätze einer Subtabelle zu bearbeiten.

Das 2 Fenster, also das modale habe ich wie folgt erstellt:

Code: Alles auswählen

LOCAL oParent := AppDeskTop()
LOCAL oOwner  := SetAppWindow()
...
oDlg := myDEsubClassF3():new(nRows,nCols,;
        /*cTitle*/,;
            oParent,oOwner,,threadObject():threadId/5,threadObject():threadId/5)

oDlg:create()
// Sicher Modal machen
oDlg:setModalState(XBP_DISP_APPMODAL)
Im Anzeigemoduls kann ich blättern mit den Bildtasten aber nicht mit e in den Editmodus schalten, drücke ich direkt auf den "Edit" Button kann ich editieren. Im Editmodus kann ich zwar Daten eingeben, Aber Enter, Tab usw. funktionieren nicht. BildRunter zum Speichern geht aber wieder.

Im Debugger sieht man, das alle nicht funktionieren Tasten im KeyHandler des ersten Fensters ankommen.

Wie kann ich sicherstellen das alle Tasten in meinem modalen Fenster ankommen?


Gruß
Markus

Re: Modales DEWindow über ein DEWindow

Verfasst: Mi, 16. Okt 2013 21:18
von AUGE_OHR
hi,

ein Thread, der Events verarbeiten soll, benötigt eine eigene Event loop.
Ich möchte über ein bestehendes DEWindow (nicht modal, eigener Tread) ein modales DEWindow öfnnen um die Datensätze einer Subtabelle zu bearbeiten.
also wenn im 1st Fenster z.b. ein Browse zur Auswahl ist und du dann "e"dit drückst und er dir eine Detail Maske aufmacht.

dafür ist Thread richtig, aber wieso dann modal ? alles was im Thread ist läuft doch "unabhängig" vom Main.

Re: Modales DEWindow über ein DEWindow

Verfasst: Do, 17. Okt 2013 14:03
von satmax
So ähnlich, aber ss ist etwas komplexer.

Ich habe ein DEWIn in einem eigenen Tread laufen. In diesem Fenster werden Daten aus ca. 8-10 Tabellen angezeigt. 3 dieser Datenbanktabellen werden im ersten DEWin als Browsercontrol angezeigt. Normale Dialoge kann ich ohne Probleme öfnnen und darin einen Datensatz bearbeiten und speichern.

Folgendes arbeitet Problemlos:
xAunr:=tdGetStr("Zu suchende Auftragsnummer:",12)

auch MultiGet ist kein Problem:
aRetGets:=tdMultiGet1("Bearbeite XY",aGets,/*[bGlobalVal]*/,/*[nStartGet]*/,/*[cTitle]*/,/*[aColor]*/,/*[cGetFont]*/,;
/*[cLabelFont]*/,/*[cBord]*/,/*[nRowAdj]*/,/*[nColAdj]*/,/*[lShowBttns]*/,/*[oOwner]*/, ;
/*[lModal]*/ .T. , /*[lEnterOn]*/ .T. ,/*<xx>*/,/*[nIcon]*/,/*[cMsgFont]*/,/*[lStatBar]*/,;
/*[nDlgWd]*/,/*[nDlgHt]*/,/*[lOvdPx]*/,/*[nLabelClr]*/,/*[aHiLiteClr]*/,/*[aActvClr]*/,/*[bEscVal]*/)


Bloss wenn auch aus einem DEWin en weiters DEWIn aufrufe klappt es nicht. Es werden dann Teile der Tastatureingabe an des erste DEWin gesandt, obwohl das 2. DEWin aktiv ist, focus hat und auch modal ist.

Ich habe testweise das 2. DEWin auch schon in einem eigenen Tread laufen lassen (DB nochmals geöffnet), aber immer das gleiche Verhalten. Möglichweise versuche ich das in einem kleinem Testprogramm nachzustellen und schicke es dann zu Clayton.


Gruß
Markus

Re: Modales DEWindow über ein DEWindow

Verfasst: Sa, 19. Okt 2013 22:56
von satmax
Im Prinzip hatte ich einfach 2 Fehler eingebaut. Aufgrund meines Beispielprogrammes konnte mir Clayton in kurzer Zeit helfen.