hI,
Ich benutze als Menü nicht DCMENU sondern XbpMenu (das die Kunden bereits aus der DOS-Version kennen)
Wenn ich SETKEY(K_ALT_F2,{||memozeig()}) benutze, um von jedem Event aus eine Memodatei aufrufen zu können, ist nach Beendigung des Moduls nicht das aufrufenden Modul (das kann ein DCBROWSE- oder ein DCSTATIC-Objekt sein) im Vordergrund sondern das XBPMENU.
Meine Kenntnisse zu den Parametern PARENT REFERENCE usw. sind leider sehr begrenzt, schön wäre es, wenn es etwas wie SetAppFocus(@oBrowse), das nur für DCBROWSE-Objekte verfügbar ist, innerhalb des Moduls memozeig() anwendbar wäre, allerdings haben die Objekte verschiedene Namen (war anders lösbar wäre)
Hat jemand eine Idee, wie das gehen könnte ?
Rücksprung nach SETKEY() zum aufrufenden Modul
Moderator: Moderatoren
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Rücksprung nach SETKEY() zum aufrufenden Modul
Zunächst einmal: Es hat wenig Sinn, SetAppFocus() per Referenz (mit "@") zu verwenden. Das benötigt man nur, wenn die Funktion, die aufgerufen wird, den übergebenen Parameter verändern können soll. SetAppFocus() setzt aber lediglich den Fokus auf das Objekt, das übrigens ein beliebiges Xbase-Part oder ein Fenster sein kann, also nicht nur ein DCBROWSE oder ein DCSTATIC. Es reicht, "SetAppFocus(<oObject>)" zu verwenden. Wenn man Parameter per Referenz übergibt, kann die aufgerufene Funktion die Daten manipulieren (Arrays werden immer per Referenz übergeben), also beispielsweise so:
Ohne Referenzparameter wird eine lokale Variable in der Funktion erzeugt, die den Wert enthält, aber die ggf. stattfindenden Veränderungen wirken sich nur hier aus. Übergibt man per Referenz, arbeitet die Funktion direkt mit der Variablen, die übergeben wird.
Zu Deiner eigentlichen Frage:
Wahrscheinlich geht es so am Einfachsten:
In "memozeig":
Code: Alles auswählen
FUNCTION TesteNamen(cName)
IF "äöü" $ cName
cName := StrTran('ä','ae')
* usw.
ENDIF
RETURN .T.
cTestName := 'Müller'
IF TesteName(cTestName) // Antwort: .T.
? cTestName // 'Müller'
ENDIF
IF TesteName(@cTestName) // Antwort: .T.
? cTestName // 'Mueller'
ENDIF
Zu Deiner eigentlichen Frage:
Wahrscheinlich geht es so am Einfachsten:
Code: Alles auswählen
SETKEY(K_ALT_F2,{||memozeig(SetAppFocus())}) // dadurch bekommt "memozeig" das Objekt, das beim Aufruf den Fokus hatte
Code: Alles auswählen
FUNCTION MemoZeit(oXbp)
...
IF ValType(oXbp) == 'O'
SetAppFocus(oXbp)
ENDIF
RETURN
Zuletzt geändert von Tom am Do, 26. Mär 2015 13:45, insgesamt 1-mal geändert.
Herzlich,
Tom
Tom
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Rücksprung nach SETKEY() zum aufrufenden Modul
Noch eine Ergänzung:
Wenn der Lösungsansatz so nicht ganz funktioniert, kann das daran liegen, dass zuerst das Fenster den Applikationsfokus erhalten muss, in dem sich das Objekt befindet, das den Fokus hatte. Im Prinzip muss man also nach dem Parent von "oXbp" suchen, wenn das nicht schon ein Fenster ist. Also statt "SetAppFocus(oXbp)" in "memozeig" beispielsweise so etwas:
Ins Blaue getippt. Rekursionen sind immer so eine Sache.
Wenn der Lösungsansatz so nicht ganz funktioniert, kann das daran liegen, dass zuerst das Fenster den Applikationsfokus erhalten muss, in dem sich das Objekt befindet, das den Fokus hatte. Im Prinzip muss man also nach dem Parent von "oXbp" suchen, wenn das nicht schon ein Fenster ist. Also statt "SetAppFocus(oXbp)" in "memozeig" beispielsweise so etwas:
Code: Alles auswählen
...
IF ValType(oXbp) == 'O'
SetParentFocus(oXbp)
ENDIF
RETURN
FUNCTION SetParentFocus(oXbp)
IF ValType(oXbp) == 'O' .AND. oXbp:IsDerivedFrom('XbpDialog')
SetAppFocus(oXbp)
RETURN .T.
ENDIF
SetParentFocus(oXbp:SetParent())
RETURN .F.
Herzlich,
Tom
Tom
Re: Rücksprung nach SETKEY() zum aufrufenden Modul
Hallo Tom,
nicht zum ersten Mal vielen Dank für deinen Tipp und dein "Hirnschmalz". Im Prinzip klappt das ganze schon prima sogar ohne Ergänzung von SetparentFocus(), das Problem mit dem Obektnamen werde ich wohl noch lösen können, evt. mit:
cvar="oxbp" und dann mit setkey(K_ALT_F2,{||memozeig(cvar)} übergeben und in memozeig() den Parameter mit SetAppFocus(&cparam) auswerten.. Mit fehlt nur dazu aktuell die Zeit, aber ich bin ganz otimistisch dank deiner Hilfe.
nicht zum ersten Mal vielen Dank für deinen Tipp und dein "Hirnschmalz". Im Prinzip klappt das ganze schon prima sogar ohne Ergänzung von SetparentFocus(), das Problem mit dem Obektnamen werde ich wohl noch lösen können, evt. mit:
cvar="oxbp" und dann mit setkey(K_ALT_F2,{||memozeig(cvar)} übergeben und in memozeig() den Parameter mit SetAppFocus(&cparam) auswerten.. Mit fehlt nur dazu aktuell die Zeit, aber ich bin ganz otimistisch dank deiner Hilfe.