xbpBrowse() im OEM-Umfeld [Erledigt]
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
xbpBrowse() im OEM-Umfeld [Erledigt]
Hallo,
im Moment stehe ich vor einem Rätsel. Ich habe eine OEM-Oberfläche. In der oberen Hälfte des Dialoges habe ich ein XbpBrowse. Wenn ich dort einen Hotkey drücke, wird eine Funktion aufgerufen, die ein MemoEdit() beinhaltet. In dieser Funktion gibt es eine Eventschleife, die mich erst zurück läßt, wenn ich den MemoEdit() mit STRG+W oder ESC verlasse.
Problem: Sobald ich in diese Funktion rein gesprungen bin, und den Fokus wieder auf den Browse setzen möchte, gibt es einen Laufzeitfehler. Weil der Browse plötzlich NIL ist. Der aber vor dem Aufruf der Editfunktion noch existierte.
Der Browse wird nicht als Parameter an die Funktion übergeben. Und nirgends geNILt oder :destroyed.
Wo kann da das Problem liegen?
Jan
im Moment stehe ich vor einem Rätsel. Ich habe eine OEM-Oberfläche. In der oberen Hälfte des Dialoges habe ich ein XbpBrowse. Wenn ich dort einen Hotkey drücke, wird eine Funktion aufgerufen, die ein MemoEdit() beinhaltet. In dieser Funktion gibt es eine Eventschleife, die mich erst zurück läßt, wenn ich den MemoEdit() mit STRG+W oder ESC verlasse.
Problem: Sobald ich in diese Funktion rein gesprungen bin, und den Fokus wieder auf den Browse setzen möchte, gibt es einen Laufzeitfehler. Weil der Browse plötzlich NIL ist. Der aber vor dem Aufruf der Editfunktion noch existierte.
Der Browse wird nicht als Parameter an die Funktion übergeben. Und nirgends geNILt oder :destroyed.
Wo kann da das Problem liegen?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: xbpBrowse() im OEM-Umfeld
Überall. Wahrscheinlich aber sitzt es. Vor Deinem Rechner.Wo kann da das Problem liegen?
Nahezu auszuschließen ist allerdings, dass dieses Problem irgendwas mit Zeichensätzen zu tun hat.
Spaß beiseite. Du rufst das MemoEdit auf und willst (anschließend?) den Fokus wieder auf das Browse setzen, aber die Variable enthält NIL. Wird sie irgendwo doppelt besetzt? Wie sieht der Code aus? Und was zur Hölle ist eine "OEM-Oberfläche"?
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbpBrowse() im OEM-Umfeld
Tom,
mir ist bewußt, daß der Fehler sehr sicher bei mir liegt. Ich versteh ihn aber nicht.
Die Oberfläche ist Text, nicht GUI. Aber mit ein paar eingestreuten GUI-Elementen wie hier halt dem Browse.
Und nein, die Variable für den Browse wird nirgends anderweitig verwendet. Die ist erstmal LOCAL.
Der Code ist im Prinzip das hier:
MEMVAR->oXbp ist SetAppWindow(), das wird direkt beim Programmstart festgelegt. Und ich mach das mit dem SetAppFocus() deswegen, damit ich den Fokus erstmal weg vom Browse und danach wieder hin zum Browse bekomme. Wobei das vollkommen egal ist - selbst wenn ich das auskommentiere, klappt das nicht. In der zeile, wo ich die Editfunktion aufrufe, ist oBrowse noch sauber belegt. Komme ich aus der Funktion zurück, ist das NIL.
Jan
mir ist bewußt, daß der Fehler sehr sicher bei mir liegt. Ich versteh ihn aber nicht.
Die Oberfläche ist Text, nicht GUI. Aber mit ein paar eingestreuten GUI-Elementen wie hier halt dem Browse.
Und nein, die Variable für den Browse wird nirgends anderweitig verwendet. Die ist erstmal LOCAL.
Der Code ist im Prinzip das hier:
Code: Alles auswählen
// UDF mit Tatstaurabfragen etc, aufgerufen in oBrowse:keyboard und oBrowse:stableBlock
...
CASE cLetzterBuchstabe = "D"
SetAppFocus(MEMVAR->oXbp)
lesekomudokufeld()
SetAppFocus(oBrowse)
oBrowse:refreshAll()
...
FUNCTION lesekomudokufeld
LOCAL cAltColor := SetColor()
LOCAL nEvent := 0
LOCAL mp1 := nil
LOCAL mp2 := nil
LOCAL oXbp := nil
SetColor("n/w*")
@ 17, 106 Clear TO 25, 209
SET cursor ON
MemoEdit(komu->dok, 17, 106, 25, 209, .F.)
SetColor(cAltColor)
DO WHILE .T.
nEvent := AppEvent(@mp1, @mp2, @oXbp)
IF nEvent = K_CTRL_END .OR. nEvent = K_ESC
Clear TypeAhead
Keyboard Chr(255)
RETURN NIL
ENDIF
MEMVAR->oXbp:handleEvent(nEvent, mp1, mp2)
ENDDO
RETURN NIL
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9361
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: xbpBrowse() im OEM-Umfeld
Mmh. Dann müsste das Problem ja im MEMVAR->oXbp:handleEvent(nEvent, mp1, mp2) stecken. Übergib doch mal das Browse als Parameter an das Memoedit und logge es vor und nach jedem Aufruf des Part-Handlers.
Herzlich,
Tom
Tom
- brandelh
- Foren-Moderator
- Beiträge: 15696
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: xbpBrowse() im OEM-Umfeld
Mir fällt das auf ...
vor der Zuweisung an ein Control, muss zunächst das Fenster den Input-Focus haben, wenn also das nicht auf dem gleichen Fenster liegt, dann
das Control das den Event empfangen hat, sollte den normal auch verarbeiten ...
Wobei wenn ich Memoedit() aufgerufen habe, habe ich der selbst eine Funktion übergeben die sich um die interne Tastatur Steuerung kümmert.
Was genau regelt die Eventloop des Hilfefensters ?
Code: Alles auswählen
SetAppFocus(MEMVAR->oXbp)
Code: Alles auswählen
SetAppFocus(oWin)
SetAppFocus(oControl)
Code: Alles auswählen
FUNCTION lesekomudokufeld
LOCAL oXbp := nil
...
MemoEdit(komu->dok, 17, 106, 25, 209, .F.)
...
DO WHILE .T.
nEvent := AppEvent(@mp1, @mp2, @oXbp) //////// LOCAL oXbp !!!!
IF nEvent = K_CTRL_END .OR. nEvent = K_ESC
...
ENDIF
MEMVAR->oXbp:handleEvent(nEvent, mp1, mp2) //// MEMVAR oXbp
ENDDO
RETURN NIL
Wobei wenn ich Memoedit() aufgerufen habe, habe ich der selbst eine Funktion übergeben die sich um die interne Tastatur Steuerung kümmert.
Was genau regelt die Eventloop des Hilfefensters ?
Gruß
Hubert
Hubert
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbpBrowse() im OEM-Umfeld
Hubert,
ja, das mit dem lokalen und dem PUBLIX oXbp war mir auch gerade aufgefallen nach dem Beitrag von Tom - es lebe copy and past . Da teste ich gerade mit der Korrektur weiter.
Jan
ja, das mit dem lokalen und dem PUBLIX oXbp war mir auch gerade aufgefallen nach dem Beitrag von Tom - es lebe copy and past . Da teste ich gerade mit der Korrektur weiter.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: xbpBrowse() im OEM-Umfeld
Tja, was soll ich sagen? Kaum macht mans richtig, schon funktionierts.
Es war in der tat die Diskrepanz beim oXbp. hatte ich einfach aus einer anderen Schleife rüber kopiert weil ich zu faul war, die paar Zeilen noch mal von Hand einzutippen. Und da ansich das Richtige stand mit oXbp war ich beim lesen auch komplett nicht darüber gestolpert.
Danke an Tom für den eher unabsichtlich gegebenen Hinweis, und Hubert für das nochmal mit der nase drauf stoßen.
Jan
Es war in der tat die Diskrepanz beim oXbp. hatte ich einfach aus einer anderen Schleife rüber kopiert weil ich zu faul war, die paar Zeilen noch mal von Hand einzutippen. Und da ansich das Richtige stand mit oXbp war ich beim lesen auch komplett nicht darüber gestolpert.
Danke an Tom für den eher unabsichtlich gegebenen Hinweis, und Hubert für das nochmal mit der nase drauf stoßen.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.