Objekt oXbpxxx schon da? [erledigt]

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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]

Beitrag von Wolfgang_B »

Hi,
wie frage ich den ab, ob ein Objekt schon da ist. Ich bekomme bei bestimmten Situationen (z.b. Scheifen) immer den Fehler:
fehler wrong state.jpg
fehler wrong state.jpg (29.58 KiB) 9659 mal betrachtet
oder was heißt der Fehler konkret?
XPPERROR_20180503_151159.LOG
(1.72 KiB) 218-mal heruntergeladen
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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Tom »

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.
Herzlich,
Tom
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

Hallo Tom,
ist ein Objekt. Danke, dann geh ich mal auf Fehlersuche ... :banghead:
Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Tom »

Ich würde sagen, Du willst ein Browse auf einem Dialog erzeugen, der selbst noch nicht fertig erzeugt wurde.
Herzlich,
Tom
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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.

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Martin Altmann »

Was ist drawingarea bei Dir?

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

das ist drawingArea des Dialogobjektes (Suchmaske)
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Martin Altmann »

Als Publicvariable?
:grommit:
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.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Martin Altmann »

Auch beim erneuten suchen hast du die Variable als Parameter übergeben?

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Objekt oXbpxxx schon da?

Beitrag von AUGE_OHR »

Wolfgang_B hat geschrieben: Do, 03. Mai 2018 18:30 Wenn ich bei
oBrowse := XbpBrowse():New( drawingArea )
die drawingArea weglasse, gehts.
setzt mal das o:Create() VOR die Naviagtions-Codeblöcke.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Objekt oXbpxxx schon da?

Beitrag von AUGE_OHR »

Wolfgang_B hat geschrieben: Do, 03. Mai 2018 18:58

Code: Alles auswählen

oDlg:close := {|| oDlg:destroy()  }
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 die :?:
Zuletzt geändert von AUGE_OHR am Fr, 04. Mai 2018 8:43, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Martin Altmann »

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
:grommit:
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.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Objekt oXbpxxx schon da?

Beitrag von AUGE_OHR »

Wolfgang_B hat geschrieben: Do, 03. Mai 2018 18:30

Code: Alles auswählen

	LOCAL oThread   := Thread():new()
	oThread:start()
was passiert da :?:
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() }
du arbeitest mit XbpDialog() und SetAppWindow():DrawingArea ... mit mehreren Fenster muss man da sehr aufpassen welches Fenster mit SetAppWindow() aktive werden "könnte".
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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

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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Objekt oXbpxxx schon da?

Beitrag von AUGE_OHR »

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 :lol:

da wundert es mich nicht wenn die drawingArea auf einmal "weg" ist ... #-o

Code: Alles auswählen

  LOCAL oThread := Thread():new()  
  oThread:start()	
ohne Parameter FuncName/CodeBlock wird KEIN Thread gestartet [-X

Code: Alles auswählen

o:start( <cFuncName>|<bCodeBlock> )
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Objekt oXbpxxx schon da?

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Objekt oXbpxxx schon da?

Beitrag von AUGE_OHR »

Wolfgang_B hat geschrieben: Fr, 04. Mai 2018 12:30 müßte man die Var->drawingArea dann jedesmal als "LOCAL" deklarieren?
compiliere doch einfach mit /W ... dann siehst man es was nicht deklariert wurde
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.
zu den (vielen) Fenster kommt noch eine Sache :
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 ;)
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.
das ist dann noch eine anderes Thema.
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
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?

Beitrag von Wolfgang_B »

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".
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Antworten