Objekt oXbpxxx schon da? [erledigt]
Moderator: Moderatoren
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Objekt oXbpxxx schon da? [erledigt]
Hi,
wie frage ich den ab, ob ein Objekt schon da ist. Ich bekomme bei bestimmten Situationen (z.b. Scheifen) immer den Fehler:
oder was heißt der Fehler konkret?
Gruß Wolfgang
wie frage ich den ab, ob ein Objekt schon da ist. Ich bekomme bei bestimmten Situationen (z.b. Scheifen) immer den Fehler:
oder was heißt der Fehler konkret?
Gruß Wolfgang
Zuletzt geändert von Wolfgang_B am Sa, 05. Mai 2018 9:58, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9357
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Wie fragst Du ab?
o:Status() == XBP_STAT_CREATE sagt Dir, dass das Objekt fertig erzeugt ist. Vorher würde ich mit ValType() prüfen, ob's überhaupt ein Objekt ist. Steht beides auf ja, kann man weitere Nachforschungen anstellen.
o:Status() == XBP_STAT_CREATE sagt Dir, dass das Objekt fertig erzeugt ist. Vorher würde ich mit ValType() prüfen, ob's überhaupt ein Objekt ist. Steht beides auf ja, kann man weitere Nachforschungen anstellen.
Herzlich,
Tom
Tom
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Hallo Tom,
ist ein Objekt. Danke, dann geh ich mal auf Fehlersuche ...
Wolfgang
ist ein Objekt. Danke, dann geh ich mal auf Fehlersuche ...
Wolfgang
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9357
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Ich würde sagen, Du willst ein Browse auf einem Dialog erzeugen, der selbst noch nicht fertig erzeugt wurde.
Herzlich,
Tom
Tom
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Wenn ich bei
oBrowse := XbpBrowse():New( drawingArea )
die drawingArea weglasse, gehts.
Ich habe wahrscheinlich wieder so eine Kunstprodukt gebaut ... Der Vorlauf ist ein oXbpDialog mit einem Eingabefeld und einem Button fürs Suchen. Das Ergebnis erscheint im Browse. Mit Doppelklick auf einen Datensatz wird die Funktion -> FUCNCTIONXY aufgerufen die einen Stammsatz darstellt. Am Ende komme ich mit RETURN(NIL) zurück. Das erste Mal klappt das auch. Die Suchmaske (oXbpDialog) ist weiterhin sichtbar und ich kann den nächten Suchbegriff eingeben. Dann knallts.
oBrowse := XbpBrowse():New( drawingArea )
die drawingArea weglasse, gehts.
Ich habe wahrscheinlich wieder so eine Kunstprodukt gebaut ... Der Vorlauf ist ein oXbpDialog mit einem Eingabefeld und einem Button fürs Suchen. Das Ergebnis erscheint im Browse. Mit Doppelklick auf einen Datensatz wird die Funktion -> FUCNCTIONXY aufgerufen die einen Stammsatz darstellt. Am Ende komme ich mit RETURN(NIL) zurück. Das erste Mal klappt das auch. Die Suchmaske (oXbpDialog) ist weiterhin sichtbar und ich kann den nächten Suchbegriff eingeben. Dann knallts.
Code: Alles auswählen
FUNCTION ARRAY_BROWSE(aData, Id )
LOCAL oBrowse
LOCAL nEvent
LOCAL oXbp := NIL
LOCAL mp1 := NIL
LOCAL mp2 := NIL
LOCAL oCol
LOCAL nWidth
LOCAL oGroup
LOCAL oThread := Thread():new()
oThread:start()
nLastRec := Len(aData)
nRecno := 1
oBrowse := XbpBrowse():New( drawingArea )
oBrowse:SkipBlock := {|nSkip, oBrowse| DoSkip( nSkip, oBrowse ) }
oBrowse:GoBottomBlock := {|| nRecno := Len(aData) }
oBrowse:GoTopBlock := {|| nRecno := 1 }
oBrowse:PosBlock := {|| nRecno }
oBrowse:PhyPosBlock := {|| nRecno }
oBrowse:GoPhyPosBlock := {|n| nRecno := n }
oBrowse:hScroll := .F.
oBrowse:LastPosBlock := {|| Len(aData) }
oBrowse:FirstPosBlock := {|| 1 }
IF id == "LISTRECH"
oBrowse:CursorMode := XBPBRW_CURSOR_CELL
ELSE
oBrowse:CursorMode := XBPBRW_CURSOR_ROW
ENDIF
oBrowse:UseVisualStyle := .F.
oBrowse:Create( ,, {20,80}, {920,400}, , .F. )
oBrowse:AddColumn( {|| aData[nRecno,1]}, 5, "Spalte1" )
oBrowse:AddColumn( {|| aData[nRecno,2]}, 15, "Spalte2" )
oBrowse:AddColumn( {|| aData[nRecno,3]}, 15, "Spalte3" )
oBrowse:itemSelected := {| uNIL1, uNIL2, self | FUNCTIONXY( oBrowse:getData()[1], oBrowse:destroy()) }
/// ??
oBrowse:HScrollObject:UseVisualStyle := .T.
oBrowse:VScrollObject:UseVisualStyle := .T.
oBrowse:Show()
SetAppFocus( oBrowse )
nEvent := xbeP_None
DO WHILE nEvent != xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:HandleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN( NIL )
// ENDFUNCTION ARRAY_BROWSE()
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Was ist drawingarea bei Dir?
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
das ist drawingArea des Dialogobjektes (Suchmaske)
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Als Publicvariable?
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Nein, ganz normal
Code: Alles auswählen
oDlg := XbpDialog():new( SetAppWindow():drawingArea , , , { 980,620 } , , .T. )
oDlg:taskList := .T.
oDlg:title := ""
oDlg:close := {|| oDlg:destroy() }
oDlg:icon := ICON_APPLICATION
oDlg:create()
SetAppFocus( oDlg )
CenterControl( oDlg )
drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "10.Arial" )
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Vielleicht noch als Ergänzung. Habe ich vorher falsch dargestellt. Ich komme nicht mit RETURN(NIL) zurück, sondern das Fenster des Stammsatzes wird mit "Fenster schließen" "X" oben rechts beendet
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Was heißt ganz normal?
Du übergibst die Variable nicht an die Funktion array_browse(), nutzt sie dort aber.
Vielleicht solltest du lieber auf Nummer sicher gehen (damit du nicht durcheinander kommst) und sie beim Aufruf mit übergeben.
Viele Grüße,
Martin
Du übergibst die Variable nicht an die Funktion array_browse(), nutzt sie dort aber.
Vielleicht solltest du lieber auf Nummer sicher gehen (damit du nicht durcheinander kommst) und sie beim Aufruf mit übergeben.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
hat nichts gebracht. Beim ersten Durchlauf erscheint der Browse ja auch im Dialogfenster. Also muß die DrawingArea ja bekannt sein. Nur wenn eine erneute Suche stattfindet knallts. Das Dialogfenster bleibt die ganze Zeit im Hintergrund sichtbar.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Auch beim erneuten suchen hast du die Variable als Parameter übergeben?
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
JA
Code: Alles auswählen
IF !errkz
ARRAY_BROWSE( aNames, IF (cSuchKz == "&", "NOMIT", "MIT" ), drawingArea )
ENDIF
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Es muß irgendwie mit der Funktion (Stammsatz) die ich aufrufe zusammenhängen. Wenn ich nur eine Testfunktion aufrufe, funktionierts einwandfrei.
Die Funktion wird aber doch mit "X" beendet. Da sollte doch alles beendet sein, oder bleibt da noch was übrig - event. die drawingArea des Dialogs des Stammsatzes? Könnte ich mir aber nicht erklären warum.
Die Funktion wird aber doch mit "X" beendet. Da sollte doch alles beendet sein, oder bleibt da noch was übrig - event. die drawingArea des Dialogs des Stammsatzes? Könnte ich mir aber nicht erklären warum.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- 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: Objekt oXbpxxx schon da?
setzt mal das o:Create() VOR die Naviagtions-Codeblöcke.Wolfgang_B hat geschrieben: ↑Do, 03. Mai 2018 18:30 Wenn ich bei
oBrowse := XbpBrowse():New( drawingArea )
die drawingArea weglasse, gehts.
gruss by OHR
Jimmy
Jimmy
- 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: Objekt oXbpxxx schon da?
der o:Close Callback Slot ist zwar dafür gedacht um auf das "X" zu reagieren ... aber da gibt es doch sicherlich eine Event-Schleife ... wie verlässt du dieWolfgang_B hat geschrieben: ↑Do, 03. Mai 2018 18:58Code: Alles auswählen
oDlg:close := {|| oDlg:destroy() }
Zuletzt geändert von AUGE_OHR am Fr, 04. Mai 2018 8:43, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Wolfgang,
schade, dass Du nächste Woche keine Zeit hast. Würden wir in Osnabrück gemeinsam auf Deinen Code schauen, hätten wir die Ursache sicherlich schnellt gefunden.
So ist das recht müßig, da der Code von Dir ja nur in kleinen Häppchen gepostet wird.
Viele Grüße,
Martin
schade, dass Du nächste Woche keine Zeit hast. Würden wir in Osnabrück gemeinsam auf Deinen Code schauen, hätten wir die Ursache sicherlich schnellt gefunden.
So ist das recht müßig, da der Code von Dir ja nur in kleinen Häppchen gepostet wird.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige 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: Objekt oXbpxxx schon da?
was passiert daWolfgang_B hat geschrieben: ↑Do, 03. Mai 2018 18:30Code: Alles auswählen
LOCAL oThread := Thread():new() oThread:start()
es wird ja nichts angegeben ...
was dein Errorlog angeht :
es sieht mir so aus als wenn der Button 2 x ausgelöst wurde und dann der Fehler auftritt.
um das zu verhindern kann man so was machen
Code: Alles auswählen
o:activate := {| uNIL1, uNIL2, oSelf | oSelf:disable(), DoWhatYouWant(),oSelf:enable() }
gruss by OHR
Jimmy
Jimmy
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Moin,
Hallo Jimmy, Hallo Martin
ich habe jetzt mal den Programmcode auf das notwendige zusammengestutzt. Statt Daten aus der DB wird ein Array verwendet. Der Ablauf ist folgender.
Eingabe eines Suchbegriffs. PB -> Suchen (Ergebnis irrelevant) -> Daten werden im Browse dargestellt. Doppelklick auf eine Zeile ergibt in der Funktion "TEST_CHANGE" die Ausgabe der Kundennummer. Solange man kein neuen Suchbegriff eingibt, funktioniert das wunderbar. Sobald man den Suchbegriff ändert, kommt der Fehler.
Der angeführte Code läuft jetzt ohne Fehler. Martin war schon auf der richtigen Spur. Ich muß im Funktionsaufruf "oXbp:activate := {|| SUCH_DIALOG_2( oXbpSF:getData(), oDlg:drawingArea )} in der Funktion "TEST_DRA" bei der Übergabe in "SUCH_DIALOG_2" zwingend die drawingArea neu zuweisen und in die folgenden Funktionen übergeben. Dann gehts. Jimmy hat auch in diese Richtung mit "mit XbpDialog() und SetAppWindow():DrawingArea" argumentiert. Ich glaube, daß das das Problem ist (3*das ).
Erst mal vielen Dank für Eure Hilfe. Bin mal gespannt, was noch alles auftaucht ...
Beste Grüße
Wolfgang
Hallo Jimmy, Hallo Martin
ich habe jetzt mal den Programmcode auf das notwendige zusammengestutzt. Statt Daten aus der DB wird ein Array verwendet. Der Ablauf ist folgender.
Eingabe eines Suchbegriffs. PB -> Suchen (Ergebnis irrelevant) -> Daten werden im Browse dargestellt. Doppelklick auf eine Zeile ergibt in der Funktion "TEST_CHANGE" die Ausgabe der Kundennummer. Solange man kein neuen Suchbegriff eingibt, funktioniert das wunderbar. Sobald man den Suchbegriff ändert, kommt der Fehler.
Der angeführte Code läuft jetzt ohne Fehler. Martin war schon auf der richtigen Spur. Ich muß im Funktionsaufruf "oXbp:activate := {|| SUCH_DIALOG_2( oXbpSF:getData(), oDlg:drawingArea )} in der Funktion "TEST_DRA" bei der Übergabe in "SUCH_DIALOG_2" zwingend die drawingArea neu zuweisen und in die folgenden Funktionen übergeben. Dann gehts. Jimmy hat auch in diese Richtung mit "mit XbpDialog() und SetAppWindow():DrawingArea" argumentiert. Ich glaube, daß das das Problem ist (3*das ).
Erst mal vielen Dank für Eure Hilfe. Bin mal gespannt, was noch alles auftaucht ...
Beste Grüße
Wolfgang
Code: Alles auswählen
FUNCTION TEST_DRA()
LOCAL oDlg, oXbpSF
LOCAL oThread := Thread():new()
oThread:start()
// Fensterbezeichnung
oDlg:= XbpDialog():new( SetAppWindow():drawingArea , , , { 980,620 } , , .T. )
oDlg:taskList := .T.
oDlg:title := "Test"
oDlg:close := {|| oDlg:destroy() }
oDlg:icon := ICON_APPLICATION
oDlg:create()
SetAppFocus( oDlg )
CenterControl( oDlg )
drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "10.Arial" )
// Suchfeld
oXbpSF := XbpSLE():new(drawingArea , , {10, 500}, {120,25}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
oXbpSF:tabStop := .T.
oXbpSF:create()
oXbp := XbpPushButton():new(drawingArea ,, {150, 500}, {60,25}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 } })
oXbp:caption := "Suchen"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| SUCH_DIALOG_2( oXbpSF:getData(), oDlg:drawingArea )}
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN (NIL)
// ENDFUNCTION TEST_DRA()
FUNCTION SUCH_DIALOG_2( cSuchVar, drawingArea )
LOCAL aNames := {}
aNames := { {"1000","Heribert","Irgendwas","München"},;
{"2000","Dieter","Testheini","Augsburg"},;
{"3000","Hefepilz","Mehl","Osnabrück"} }
ARRAY_BROWSE_2( aNames, drawingArea )
RETURN(NIL)
// ENDFUNCTION SUCH_DIALOG_2()
FUNCTION ARRAY_BROWSE_2(aData, drawingArea )
LOCAL oBrowse
LOCAL nEvent
LOCAL oXbp := NIL
LOCAL mp1 := NIL
LOCAL mp2 := NIL
LOCAL oThread := Thread():new()
oThread:start()
nLastRec := Len(aData)
nRecno := 1
oBrowse := XbpBrowse():New( drawingArea , , , ,{{XBP_PP_COL_DA_HILITE_BGCLR , GRA_CLR_YELLOW },{XBP_PP_COL_DA_HILITE_FGCLR , GRA_CLR_BLACK }})
oBrowse:SkipBlock := {|nSkip, oBrowse| DoSkip_2( nSkip, oBrowse ) }
oBrowse:GoBottomBlock := {|| nRecno := Len(aData) }
oBrowse:GoTopBlock := {|| nRecno := 1 }
oBrowse:PosBlock := {|| nRecno }
oBrowse:PhyPosBlock := {|| nRecno }
oBrowse:GoPhyPosBlock := {|n| nRecno := n }
oBrowse:hScroll := .F.
oBrowse:LastPosBlock := {|| Len(aData) }
oBrowse:FirstPosBlock := {|| 1 }
oBrowse:CursorMode := XBPBRW_CURSOR_ROW
oBrowse:UseVisualStyle := .F.
oBrowse:Create( ,, {20,80}, {920,400}, , .F. )
oBrowse:AddColumn( {|| aData[nRecno,1]}, 5, "KundNr" )
oBrowse:AddColumn( {|| aData[nRecno,2]}, 15, "Name" )
oBrowse:AddColumn( {|| aData[nRecno,3]}, 15, "Strasse" )
oBrowse:AddColumn( {|| aData[nRecno,4]}, 10, "Wohnort" )
oBrowse:itemSelected := {| uNIL1, uNIL2, self | TEST_CHANGE( oBrowse:getData()[1] ) }
oBrowse:HScrollObject:UseVisualStyle := .T.
oBrowse:VScrollObject:UseVisualStyle := .T.
oBrowse:Show()
SetAppFocus( oBrowse )
nEvent := xbeP_None
DO WHILE nEvent != xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:HandleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN( NIL )
// ENDFUNCTION ARRAY_BROWSE_2()
FUNCTION DoSkip_2( nSkip )
LOCAL nCanSkip
IF nRecno + nSkip < 1 // "BoF"
nCanSkip := 1 - nRecno
ELSEIF nRecno + nSkip > nLastRec // "EoF"
nCanSkip := nLastRec - nRecno
ELSE
nCanSkip := nSkip
ENDIF
nRecno += nCanSkip
RETURN nCanSkip
// ENDFUNCTION DoSkip_2()
FUNCTION TEST_CHANGE( kdnr )
LOCAL oDlg2
oDlg2 := XbpDialog():new( SetAppWindow():drawingArea, , , {600,710} , { { XBP_PP_FGCLR , aColor[1] }, { XBP_PP_COMPOUNDNAME, "8.ARIAL" } } , .F. )
oDlg2:taskList := .T.
oDlg2:close := {|| oDlg2:destroy() }
oDlg2:title := "Test drawingArea"
oDlg2:icon := ICON_APPLICATION
oDlg2:create()
CenterControl( oDlg2 )
drawingArea := oDlg2:drawingArea
oXbpSF := XbpSLE():new(drawingArea , , {10, 300}, {120,25}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } } )
oXbpSF:tabStop := .T.
oXbpSF:create():setData( kdnr )
oDlg2:show()
nEvent := 0
DO WHILE nEvent <> xbeP_Close
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDDO
RETURN( NIL)
// ENDFUNCTION TEST_CHANGE()
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- 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: Objekt oXbpxxx schon da?
dein Code lässt sich "so" ja noch nicht zu einem Demo zusammen bauen ...
du verwendest die Variabel drawingArea in mehreren Function ... ohne Deklaration wäre die PRIVATE
welche hätten sie denn gerne
da wundert es mich nicht wenn die drawingArea auf einmal "weg" ist ...
ohne Parameter FuncName/CodeBlock wird KEIN Thread gestartet
du verwendest die Variabel drawingArea in mehreren Function ... ohne Deklaration wäre die PRIVATE
welche hätten sie denn gerne
da wundert es mich nicht wenn die drawingArea auf einmal "weg" ist ...
Code: Alles auswählen
LOCAL oThread := Thread():new()
oThread:start()
Code: Alles auswählen
o:start( <cFuncName>|<bCodeBlock> )
gruss by OHR
Jimmy
Jimmy
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Hi Jimmy,
müßte man die Var->drawingArea dann jedesmal als "LOCAL" deklarieren? Mich wundert es nur, daß der Fehler bis jetzt noch nicht aufgetreten ist, obwohl ich in jedem Fenster in dem ein Xbp-Objekt ist die drawingArea neu zuweise, ohne Deklaration.
Das mit den Threads ist ein eigenes Thema. So hundertprozentig bin ich da noch nicht durchgestiegen. Da erschließt sich mir noch nicht ganz die Logig.
btw. der Code läuft so. Ich habe den testweise in mein Programm gehängt, da sind natürlich die Randbedingungen erfüllt.
Wolfgang
müßte man die Var->drawingArea dann jedesmal als "LOCAL" deklarieren? Mich wundert es nur, daß der Fehler bis jetzt noch nicht aufgetreten ist, obwohl ich in jedem Fenster in dem ein Xbp-Objekt ist die drawingArea neu zuweise, ohne Deklaration.
Das mit den Threads ist ein eigenes Thema. So hundertprozentig bin ich da noch nicht durchgestiegen. Da erschließt sich mir noch nicht ganz die Logig.
btw. der Code läuft so. Ich habe den testweise in mein Programm gehängt, da sind natürlich die Randbedingungen erfüllt.
Wolfgang
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Jan
- Marvin
- Beiträge: 14651
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Objekt oXbpxxx schon da?
Wolfgang,
was mir an Deinen Code auffällt: Manchmal gehst Du auf drawingArea (die Variable, die Du mit oDlg:drawingArea belegt hast), und manchmal direkt auf oDlg:drawingArea. Warum?
Ich selber mache das nie, die oDlg:drawingArea in eine Variable einzulesen, und dann im weiteren Verlauf damit zu arbeiten. Ich gehe immer direkt auf oDlg:drawingArea. Das mag vielleicht auch Nachteile haben. Aber ich spare mir die Variable, weiß immer auf welcher drawingArea ich gerade rumhantiere, habe keine Probleme mit irgendwelchen eventuell kollidierenden Deklarationen, lebe damit meine Gewohnheit.
Jan
was mir an Deinen Code auffällt: Manchmal gehst Du auf drawingArea (die Variable, die Du mit oDlg:drawingArea belegt hast), und manchmal direkt auf oDlg:drawingArea. Warum?
Ich selber mache das nie, die oDlg:drawingArea in eine Variable einzulesen, und dann im weiteren Verlauf damit zu arbeiten. Ich gehe immer direkt auf oDlg:drawingArea. Das mag vielleicht auch Nachteile haben. Aber ich spare mir die Variable, weiß immer auf welcher drawingArea ich gerade rumhantiere, habe keine Probleme mit irgendwelchen eventuell kollidierenden Deklarationen, lebe damit meine Gewohnheit.
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.
- 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: Objekt oXbpxxx schon da?
compiliere doch einfach mit /W ... dann siehst man es was nicht deklariert wurdeWolfgang_B hat geschrieben: ↑Fr, 04. Mai 2018 12:30 müßte man die Var->drawingArea dann jedesmal als "LOCAL" deklarieren?
zu den (vielen) Fenster kommt noch eine Sache :Wolfgang_B hat geschrieben:Mich wundert es nur, daß der Fehler bis jetzt noch nicht aufgetreten ist, obwohl ich in jedem Fenster in dem ein Xbp-Objekt ist die drawingArea neu zuweise, ohne Deklaration.
unter Windows kann der User auch "wo anders" sprich in ein anderes Fenster klicken (was auch eine andere App sein kann).
man sollte schon den Parent als Parameter übergeben dann ist es sicher das es wirklich ein Child "von ihm" ist
das ist dann noch eine anderes Thema.Wolfgang_B hat geschrieben:Das mit den Threads ist ein eigenes Thema. So hundertprozentig bin ich da noch nicht durchgestiegen. Da erschließt sich mir noch nicht ganz die Logig.
gruss by OHR
Jimmy
Jimmy
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 484
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Objekt oXbpxxx schon da?
Jan,
normalerweise mache ich das auch nicht. Ich verwende sonst immer die nackte Variable "drawingArea". Nur in diesem Fall mußte ich sie bei der Übergabe in die Funktion explizit "oDlg:drawingArea" nochmal zuweisen. Eine Übergabe von "drawingArea" allein hat an dieser Stelle nicht funktioniert.
Daher nochmals die Frage an alle. Muß die Variable "drawingArea" in der verwendeten Funktion deklariert werden? Und wenn, wie - "LOCAL" ??
In den Beispielen von Alaska ist die nirgends als Irgendwas deklariert.
Wolfgang
@jimmy - danke für den Tipp mit dem "parent".
normalerweise mache ich das auch nicht. Ich verwende sonst immer die nackte Variable "drawingArea". Nur in diesem Fall mußte ich sie bei der Übergabe in die Funktion explizit "oDlg:drawingArea" nochmal zuweisen. Eine Übergabe von "drawingArea" allein hat an dieser Stelle nicht funktioniert.
Daher nochmals die Frage an alle. Muß die Variable "drawingArea" in der verwendeten Funktion deklariert werden? Und wenn, wie - "LOCAL" ??
In den Beispielen von Alaska ist die nirgends als Irgendwas deklariert.
Wolfgang
@jimmy - danke für den Tipp mit dem "parent".
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück