Focus Verlust bei Wechsel zu anderem Programm
Moderator: Moderatoren
Re: Focus Verlust bei Wechsel zu anderem Programm
Hallo,
das habe ich nicht verstanden.
Ich habe den Einstieg mit einem CRT Fenster. Als erstes wird dann in meinem Objekt ein Fenster mit xbpdialog gebaut. Dieses Fenster müßte doch dann das Parent für die anderen xbpParts sein oder? Nur wie sage ich das dem Programm und wie den weiteren xbpParts?
mfg
Wolfgang
das habe ich nicht verstanden.
Ich habe den Einstieg mit einem CRT Fenster. Als erstes wird dann in meinem Objekt ein Fenster mit xbpdialog gebaut. Dieses Fenster müßte doch dann das Parent für die anderen xbpParts sein oder? Nur wie sage ich das dem Programm und wie den weiteren xbpParts?
mfg
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Focus Verlust bei Wechsel zu anderem Programm
Hallo, Wolfgang -
Die beiden ersten Parameter der Methode :new() geben Parent und Owner an.
In Deinem Beispiel gibst Du an ArrayBrowse():new(, , oPos, oSize ...)
Wenn Du keinen Parent und keinen Owner angibst, wird das über SetAppwindow() abrufbare Objekt zum Parent, und in Deinem Fall ist das dann das XbpCRT. Anstelle der beiden leeren Parameter musst Du eben das MyXbpDialog() Objekt angeben, bzw. die :drawingArea davon:
oder
Die :drawingArea ist der Teil des XbpDialog, auf dem man seine Objekte platzieren sollte (so habe ich das zumindest bisher verstanden). Wenn Du nur den Parent angibst, verwendet die jeweilige Klasse den Parent ebenfalls als Owner.
Ist das jetzt deutlicher geworden?
Code: Alles auswählen
oDlg := MyXbpDialog():...
....
oDlg:create()
oXbp := XbpSLE():new(oDlg, oDlg, aPos, aSize)
In Deinem Beispiel gibst Du an ArrayBrowse():new(, , oPos, oSize ...)
Wenn Du keinen Parent und keinen Owner angibst, wird das über SetAppwindow() abrufbare Objekt zum Parent, und in Deinem Fall ist das dann das XbpCRT. Anstelle der beiden leeren Parameter musst Du eben das MyXbpDialog() Objekt angeben, bzw. die :drawingArea davon:
Code: Alles auswählen
ArrayBrowse():new(oDlg:drawingArea, oDlg:drawingArea, oPos, oSize ...)
Code: Alles auswählen
ArrayBrowse():new(oDlg:drawingArea, , oPos, oSize ...)
Ist das jetzt deutlicher geworden?
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Re: Focus Verlust bei Wechsel zu anderem Programm
Hallo,
ja und nein. Das Problem liegt wie immer im Detail. Wie bereits gesagt, ich habe das Beispielprogramm umgebaut und habe Namen eingebaut die mir das Verständnis erleichtern. Zu Anfang wußte ich überhaupt nicht was da so alles abläuft und warum. Einiges ist mir zwischenzeitlich klarer geworden. Aber da bin ich immer noch dran. Das mit der Parentübergabe habe ich bisher immer so lang probiert bis was auf dem Bildschirm erschien, weiß aber nicht warum.Stehen da an den Platzhaltern für oParent die falschen Werte drin oder ist ein solcher Aufbau von Hause aus falsch?
mfg
Wolfgang
ja und nein. Das Problem liegt wie immer im Detail. Wie bereits gesagt, ich habe das Beispielprogramm umgebaut und habe Namen eingebaut die mir das Verständnis erleichtern. Zu Anfang wußte ich überhaupt nicht was da so alles abläuft und warum. Einiges ist mir zwischenzeitlich klarer geworden. Aber da bin ich immer noch dran. Das mit der Parentübergabe habe ich bisher immer so lang probiert bis was auf dem Bildschirm erschien, weiß aber nicht warum.
Code: Alles auswählen
** Mein Objekt
oLFZEingabe:=ArrayBrowse():New( , , opos , osize , , ,):Create() // läuft in einem CRT Fenster
CLASS ArrayBrowse FROM BrowseFenster
Endclass
METHOD ArrayBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
::BrowseFenster:init( oParent, oOwner, aPos, aSize, aPP, .F. )
::ABrowse := XbpBrowse():new( ::drawingarea , , aPos , aSize}, aPP )
Return
METHOD ArrayBrowse:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::BrowseFenster:create( oParent, oOwner, aPos, aSize, aPP, .F. )
::ABrowse:Create ()
Return
CLASS BrowseFenster FROM XbpDialog
Endclass
METHOD BrowseFenster:init( oParent, oOwner, aPos, aSize, aPP, lVisible)
::XbpDialog:init( ::drawingarea, oOwner, aPos, aSize, aPP, lVisible )
::oButton:= XbpPushButton():new(::drawingArea , , aPos, aSize}
Return
METHOD BrowseFenster:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::oButton:=create()
?::BrowseFenster:setparent() // bringt xbpCRT da ich das Fenster im CRT Fenster aufgemacht habe dürfte das stimmen
?::oButton:setparent() // bringt xbpIWindow, da verstehe ich nicht warum
::oButton:setparent(::BrowseFenster) // sollte das Parent auf das Fenster mit xbpdialog gemacht ändern
?::oButton:setparent() // bringt aber ArrayBrowse
Return
mfg
Wolfgang
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2824
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 95 Mal
- Danksagung erhalten: 13 Mal
Re: Focus Verlust bei Wechsel zu anderem Programm
Guten Morgen, Wolfgang -
Dein Klassen-Aufbau ist - zumindest mal überflogen - korrekt, das Problem liegt in der Erzeugung des ArrayBrowse Objektes. Wenn Du die beiden ersten Parameter in :new() nicht übergibst, erhält Deine Klasse als Parameter NIL.
Xbase geht normalerweise geht wie folgt damit um, wenn z.B. oParent fehlt:
wird das XbpCRT-Fenster zum oParent und oOwner.
Um das zu vermeiden, muss das Objekt mit
erzeugt werden.
Dein Klassen-Aufbau ist - zumindest mal überflogen - korrekt, das Problem liegt in der Erzeugung des ArrayBrowse Objektes. Wenn Du die beiden ersten Parameter in :new() nicht übergibst, erhält Deine Klasse als Parameter NIL.
Xbase geht normalerweise geht wie folgt damit um, wenn z.B. oParent fehlt:
Durch die Übergabe von NIL in Deinem Code (oParent und oOwner haben den Wert NIL):The parent for an XbpBrowse object can be optionally specified using the parameter <oParent> . By default <oParent> is the active window (the return value of SetAppWindow()). If the default is used, the active window must be an XbpCrt window. If the active window is an XbpDialog window, the drawing area of the window must be specified for <oParent> . The drawing area is referenced using the instance variable oXbpDialog:drawingArea .
Code: Alles auswählen
METHOD ArrayBrowse:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
::BrowseFenster:init( oParent, oOwner, aPos, aSize, aPP, .F. )
Um das zu vermeiden, muss das Objekt mit
Code: Alles auswählen
oLFZEingabe:=ArrayBrowse():New(oDlg:drawingArea, oDlg:drawingArea, opos, osize):Create()
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Focus Verlust bei Wechsel zu anderem Programm
hm ...georg hat geschrieben:Dein Klassen-Aufbau ist - zumindest mal überflogen - korrekt
ich versuche es zum letzten Mal : nimm ein XbpDialog als "Main" und ein "richtiges" oCRT Fenster mit der o:drawingArea als Parent.Ich habe den Einstieg mit einem CRT Fenster. Als erstes wird dann in meinem Objekt ein Fenster mit xbpdialog gebaut. Dieses Fenster müßte doch dann das Parent für die anderen xbpParts sein oder?
ein oCRT Fenster "sollte" man lieber nicht als Parent verwenden sondern o:drawingArea -> Superclass XbpIWindow() ... oder AppDeskTop()
gruss by OHR
Jimmy
Jimmy
Re: Focus Verlust bei Wechsel zu anderem Programm
Hallo Jimmy,
das ist zwar richtig, führt aber dazu dass ich die nächste Baustelle habe. Denn nur durch den Umbau wird mein Wissen ja nicht automatisch mehr. Die Fenstertechnik muß dann ja auch beherscht werden oder?
mfg
Wolfgang
das ist zwar richtig, führt aber dazu dass ich die nächste Baustelle habe. Denn nur durch den Umbau wird mein Wissen ja nicht automatisch mehr. Die Fenstertechnik muß dann ja auch beherscht werden oder?
mfg
Wolfgang
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Focus Verlust bei Wechsel zu anderem Programm
wer sagt sowas ?AUGE_OHR hat geschrieben:ein oCRT Fenster "sollte" man lieber nicht als Parent verwenden sondern o:drawingArea -> Superclass XbpIWindow() ... oder AppDeskTop()
Ein XbpCrt() kann ohne Probleme als Parent dienen, man muss dieses nur nicht angeben, das der Parent dann mit SetAppWindow() bestimmt wird.Doku zu SetAppWindow() hat geschrieben:In einer GUI Anwendung dient das Applikationsfenster als Parent für Xbase Parts, die ohne Angabe eines Parent erzeugt wurden.
Falls ein XbpCrt-Fenster als Appliktionsfenster verwendet wird (Hybrid Anwendung), dient dieses Fenster gleichzeitig als Ausgabegerät für alle text-orientierten Bildschirmausgaben
Was Jimmy meinte ist, dass man kein DialogFenster (mit XbpDialog()) als Parent bei controls angibt, sondern dessen :drawingArea
Das gibt es nicht bei XbpCrt().
Bei den CRT Fenstern, muss man das jeweilige "Hauptfenster" (also das, welches den Focus erhält wenn er neu zu vergeben ist z.B. nach MsgBox()) bei SetAppWindow() hinterlegt werden.
Ob das einfacher ist als es sich gleich richtig anzueignen (also komplett XbpDialog() ), weiß ich nicht.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Focus Verlust bei Wechsel zu anderem Programm
ich sagte "sollte" ...brandelh hat geschrieben:wer sagt sowas ?
YUPbrandelh hat geschrieben:Ein XbpCrt() kann ohne Probleme als Parent dienen, man muss dieses nur nicht angeben, das der Parent dann mit SetAppWindow() bestimmt wird.
Was Jimmy meinte ist, dass man kein DialogFenster (mit XbpDialog()) als Parent bei controls angibt, sondern dessen :drawingArea
Das gibt es nicht bei XbpCrt().
und "so-rum" in Griff zu kriegen ist einfach viel schwerer.brandelh hat geschrieben:Bei den CRT Fenstern, muss man das jeweilige "Hauptfenster" (also das, welches den Focus erhält wenn er neu zu vergeben ist z.B. nach MsgBox()) bei SetAppWindow() hinterlegt werden.
spätesten mit mehren Threads / CRT Fenster kommt man da ganz schnett an die Grenzen.
davon habe ich eben nie gesprochen !brandelh hat geschrieben:Ob das einfacher ist als es sich gleich richtig anzueignen (also komplett XbpDialog() ), weiß ich nicht.
Es geht darum das "Main" als XbpDialog() auszulegen und ein CRT Object dann auf der o:DrawingArea.
in dem CRT Object läuft dann der alter Cl*pper Code und die XbParts erhalten oCRT als Parent und die o:DrawingArea als Owner.
dann kann man auch die o:setDisplayFocus und o:killDisplayFocus Callback Slots auch ordenlich bestücken
gruss by OHR
Jimmy
Jimmy