Unterprogrammfenster schließen und Focus setzen

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
THEDiximaster
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 22. Dez 2008 13:42

Unterprogrammfenster schließen und Focus setzen

Beitrag von THEDiximaster »

Hallo Forum!

Um eines vorweg zu sagen: Ich bin noch recht neu in der objektorientierten Programmierung mit Xbase++.

Und ich nehme an/hoffe das die frage eigentlich relativ trivial ist, aber ich hab schon mehrere Sachen ausprobiert und auch schon die SUFU genutzt und nichts gefunden, also bitte helft mir!

Was ich vorhabe:

Es wird eine Suche nach Personen durchgeführt. Als suchwort dienst der Nachname. wenn nun mehrere Person mit demsleben nachnamen vorhanden sind geht ein fenster auf mit einer listbox. dort soll der user die gewünschte person dann auswählen und auf "Ok" klicken. daraufhin soll sich das fenster wieder schließen und der richtige datensatz angezeigt werden.

Ich hab also eine UDF geschrieben mit nem neuen Fenster und ner Listbox und den gewünschten Pushbuttons. Alles kein Problem. Ich weis nur nicht was ich in den CallbackSlot des OK Buttons schreiben soll, damit sich das Fenster wieder schließt. Ursprünglich hatte ich gedacht,ich schreib ein "Return" rein und fertig ist die sache. Doch dann schmeißt mir der Compiler "Reserved Keyword" raus. wenn ich aber mit XbeP_Close arbeite dann schließt sich auch das Hautpfenster.

Ein weiteres, aber relativ kleines Problem ist, dass ich den FOcus nicht auf das kleine Fenster legen kann. ich hab es mit SetAppFocus() versucht, aber das Fenster bleibt "grau". Wäre schön wenn jemand dazu noch eine Lösung hätte.

Falls jetzt noch Fragen zum Problem auftauchen, einfach rückfragen, da das hier auch mein erstes Posting in dem Forum hier ist undich nciht genau weis wie ich das Problem treffend beschreiben soll.....

Ich würde mich sehr freuen wenn mit jemand unter die Arme greifen könnte, ich sehe im Moment einfach keine Lösungsmöglichkeit mehr.

Danke im Vorraus

Dixi
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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: Unterprogrammfenster schließen und Focus setzen

Beitrag von Tom »

Hallo, Dixi.

Ein Codeschnipsel würde es vereinfachen, Dir zu helfen.

Kann der andere Benutzer "Dixi" gelöscht werden? Du hast Dich m.E. zweimal angemeldet.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
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: Unterprogrammfenster schließen und Focus setzen

Beitrag von Jan »

Dixi,
Dixi hat geschrieben:Ursprünglich hatte ich gedacht,ich schreib ein "Return" rein und fertig ist die sache. Doch dann schmeißt mir der Compiler "Reserved Keyword" raus. wenn ich aber mit XbeP_Close arbeite dann schließt sich auch das Hautpfenster.
Beides ist korrekt. Einfach nur RETURN in dem Close-Slot kann nicht gehen, und XbeP_Close schließt immer die komplette Anwendung. Du must explizit angeben, was denn nun geschlossen werden soll. Also z. B. ein oDlg:destroy() könnte passen.

Aber wie Tom schon sagte: Ein wenig von Deinem Code könnte helfen, den richtigen Lösungsansatz herauszufinden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von Rolf Ramacher »

Hallo Dixi,

ich habe dies bei mir so gelöst:

Code: Alles auswählen

   oXbp:activate := {|| aBest1:=NeuBest(aObj,aBest1,oStatic2,aObj2),PostAppEvent( xbeP_Close ) }

   oDlg:show()
	oBrowse:show()
	SetAppFocus(oBrowse)

   nEvent := xbe_None
   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )
   ENDDO

	oDlg:destroy()
	oParent:enable()
	SetAppFocus(oParent)
oParent ist natürlich die vorherige Maske. Diese muß an diese Function übergeben werden. In diesem Fall ist ein

XbpPushButton definiert und beim activate wird die entsprechende Operation durchgeführt und das Fenster wird geschlossen.
Auch wenn du auf das "Kreuz" klickst.

Vielleicht hilft es dir
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
THEDiximaster
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 22. Dez 2008 13:42

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von THEDiximaster »

An rolf:

Wenn ich das so mache schließt doch das gnaze Programm, wie es oben beschrieben wurde oder?

und hier mein Code:

Code: Alles auswählen

oXbp := XbpPushButton():new( drawingArea, , {24,36}, {96,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   // Das hier ist der "ok" button, er springt zum Datensatz und anschließénd halt das nicht funktionierende "Return"
   
   oXbp:caption := "Ok"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {|| aArray:=olist:getdata(),dbgoto(arecno[aArray[1]],omul:destroy(), Return Nil}
   
   //Hier der "Abbruch" Button, es ist wahrscheinlich hierdran auszuprobieren, ob das fenster schließt oder nicht
   oXbp := XbpPushButton():new( drawingArea, , {180,36}, {96,24}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } } )
   oXbp:caption := "Abbruch"
   oXbp:tabStop := .T.
   oXbp:create()
   oXbp:activate := {  omul:destroy() }
//Hiermit fülle ich die Listbox
   Do WHILE alltrim(upper(NACHNAME))=alltrim(upper(cname))
       olist:additem(alltrim(NACHNAME)+", "+alltrim(VORNAME)+" Klasse: "+alltrim(Klasse))
       aadd(arecno,recno())
       dbskip(1)
   ENDDO

   omul:show()
   Setappfocus(omul) //Dieser Focus funktioniert nicht


   Return NIL

Ich hoffe das ist jetzt der Relevante Code
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von Manfred »

Hi Dixi,

wenn die Pushbutton gedrückt werden, dann wird omul zerstört. Danach kann kein Show, oder SetappFocus mehr darauf gemacht werden. Ich hoffe ich sehe das jetzt richtig...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
THEDiximaster
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 22. Dez 2008 13:42

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von THEDiximaster »

Manfred hat geschrieben:Hi Dixi,

wenn die Pushbutton gedrückt werden, dann wird omul zerstört. Danach kann kein Show, oder SetappFocus mehr darauf gemacht werden. Ich hoffe ich sehe das jetzt richtig...
ICh glaube die stelle auf die du dich beziehst, hat eher was mit dem fesnter schließ problem zu tun als mit dem focus. ich setz den focus ja nich im pushbutton
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von Manfred »

Hm,

wenn Du den Pushbutton drückst, dann wird ein omul:destroy() gemacht. Das Objekt ist weg. Es gibt dann kein :show, oder SetAppFocus() mehr. Das meinte ich.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
THEDiximaster
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 22. Dez 2008 13:42

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von THEDiximaster »

Achsoooo

ich glaub wir haben uns missverstanden, zumindeest ich dich.


der focus wird nicht mit dem pushbutton gesetzt, der soll direkt beim aufruf des fensters gesetzt werden, und um das nochmal zu verdeutlichen, der hier gepostete code ist aus der UDF und nicht vom hauptfenster. in dem callbackslot mit omul:destroy soll das fenster geschlossen werde und das unterprogramm beendet werden. wenn ich omul:destroy() mache dann wird omul zwar verworfen, aber nciht das programm beendet, so zumindest meine logik ;-)
THEDiximaster
Rookie
Rookie
Beiträge: 5
Registriert: Mo, 22. Dez 2008 13:42

Re: Unterprogrammfenster schließen und Focus setzen

Beitrag von THEDiximaster »

Hallo nochmal,

Dass Problem hat sich gelöst. :destroy() wra schon richtig, hatte aber noch nen andren fehler gemacht....

Gruss und danke

Dixi

PS: Schöne Feiertage
Antworten