CRT Fenster GUI Fenster und wieder zurück

Auf dem Weg von Clipper, FoxPro u.ä. nach Xbase++

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

CRT Fenster GUI Fenster und wieder zurück

Beitrag von saul »

Hallo,
ich habe meine Clipper Anwendungen alle im CRT Fenster laufen. Nun wollte ich anfangen auf GUI umzustellen.
aus einem CRT Fenster (Objekt oCRT) rufe ich auf:

Code: Alles auswählen

function Dialog
LOCAL nEvent, mp1, mp2, oDlg
      // Dialogfenster versteckt erzeugen
      oDlg          := XbpDialog():new( oCRT,,{10,10}, {600,400},, .F. )
      oDlg:icon     := -1
      oDlg:taskList := .f.
      oDlg:title    := "Titel"
      oDlg:titlebar := .t.
      oDlg:maxbutton:= .F.
      oDlg:minbutton:= .F.
      oDlg:border:= XBPDLG_DLGBORDER
      oDlg:drawingArea:setFontCompoundName( "8.Helv" )
      oDlg:create()
	// Pushbutton erzeugen
      butt1:= XbpPushButton():new( oDlg ,, {10,10}, {100,30})
      butt1:caption := "Abbruch"
      butt1:create( , , {10,20}, {100,40} )
      butt1:activate := {|| PostAppEvent( xbeP_Close) }
      oDlg:show()
      SetAppFocus( oDlg )
	// Event loop
      nEvent := 0
      DO WHILE nEvent <> xbeP_Close
         nEvent := AppEvent( @mp1, @mp2, @oDlg )
         oDlg:HandleEvent( nEvent, mp1, mp2 )
      ENDDO
     oCrt:show()
     SetAppFocus( oCRT )
     SetAppWindow ( oCrt )
     oDlg:Destroy()
return .t.
Das GUI Fenster baut sich auf und ich kann den Abbruch button betätigen. Leider bricht das Programm dann ab. Ich denke der Rücksprung/schritt zum CRT Fenster habe ich nicht richtig gemacht.
Wo liegt mein Fehler
Danke
Wolfgang
Zuletzt geändert von saul am Sa, 16. Feb 2008 14:51, insgesamt 1-mal geändert.
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:

Beitrag von Rolf Ramacher »

Hallo Wolfgang,

zeig uns dochmal deine Fehlermeldung. Gibt es eine xpperorr.log??

Ein Tip zur besseren Darstellung von Quellcode.

einmal auf Code klicken. Deinen Code posten. dann wieder auf Code klicken. Mit Vorschau kannst du dir das mal anschauen.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Hallo,
hier der Fehlercode. Ich habe den Code in meiner Problembeschreibung aus meinem normalen Programm rausgenommen, da ich ja sonst viel zu viel einstellen muss.
  • FEHLERPROTOKOLL von "F:\lfzzeit\edfc19\LFZZEITW.EXE" Datum: 16.02.2008 13:11:43

    Xbase++ Version : Xbase++ (R) Version 1.90.331
    Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
    ------------------------------------------------------------------------------
    oError:args :
    oError:canDefault : N
    oError:canRetry : N
    oError:canSubstitute: J
    oError:cargo : NIL
    oError:description : Zugriff auf Methode nicht erlaubt
    oError:filename :
    oError:genCode : 25
    oError:operation : maxRow
    oError:osCode : 0
    oError:severity : 2
    oError:subCode : 4402
    oError:subSystem : BASE
    oError:thread : 1
    oError:tries : 0
    ------------------------------------------------------------------------------
    CALLSTACK:
    ------------------------------------------------------------------------------
    Aufgerufen von _MAXROW(1864)
    Aufgerufen von MAIN(464)
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Welches ist denn die Zeile Main 464? kannst Du den Abschnitt inkl. Zeilennummern posten?

Jan
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Vieln Dank für Eure Hilfe, aber ich sehe mit meinem ürsprünglichen Code wird das alles zu langatmig. Daher habe ich schnell die die wichtigen Dinge zusammengetragen, wie Sie in meiner normalen Anwendung vorkommen. Ziel ist mit der F2 Taste mir in einem GUI Fenster während eines read Daten mit xbpbrowse() anzeigen zu lassen. Da habe ich erstmal mit dem dazugehörigen Fenster angefangen.

Code: Alles auswählen

#include "Common.ch"
#include "xbp.ch"
#include "inkey.ch"
#include "directry.ch"
#include "DLL.CH"
#include "regclass.ch"
#include "Appevent.ch"

****************************************************************************
* Funktion AppSys() um Standard-Ausgabegeraete zu erzeugen
****************************************************************************
PROCEDURE AppSys()

  LOCAL nAppType := AppType()
  LOCAL aPos
  Public aSizeDesktop
	#define DEF_ROWS       25
	#define DEF_COLS       80
  public oCrt // damit in allen Unterprogrammen vorhanden ist
              //jeden Programmes muá oCrt:destroy() freigegeben werden

  DO CASE
    // Anwendung wurde im PM Modus gelinkt, eine XbpCrt Instanz
    // ist zu erzeugen.
    CASE nAppType == APPTYPE_PM
      // Bestimmen der Fensterposition (Anordnen in der Mitte
      // des Desktop-Fensters)
      aSizeDesktop:= AppDesktop():currentSize()
      if aSizedesktop[1] > 810
         DEF_FONTHEIGHT = 24
         DEF_FONTWIDTH = 12
         aPos := { 10,77 }
      elseif aSizedesktop[1] > 780  .and. aSizedesktop[1] < 810
         DEF_FONTHEIGHT = 20
         DEF_FONTWIDTH = 10
         aPos := { -4,77 }
      elseif aSizedesktop[1] < 781
         DEF_FONTHEIGHT = 17
         DEF_FONTWIDTH = 8
         aPos := { -4,32 }
      endif

      // XbpCRT-Fenster erzeugen
      oCrt := XbpCrt():New ( NIL, NIL, aPos, DEF_ROWS, DEF_COLS )
      oCrt:FontWidth  := DEF_FONTWIDTH
      oCrt:FontHeight := DEF_FONTHEIGHT
      oCrt:title      := "Timechecker"
      oCrt:icon       := 1
      oCrt:sysmenu    := .t.

    #ifdef __OS2__
       oCrt:FontName   := "System VIO"
    #endif
    #ifdef __WIN32__
      oCrt:FontName   := "Courier"
    #endif
     oCrt:Create()

      // Presentation Space initialisieren
      oCrt:PresSpace()

      // XbpCrt wird aktives Fenster und Ausgabeger„t
      SetAppWindow ( oCrt )

    // Anwendung wurde im VIO oder NOVIO Modus gelinkt, eine RootCrt
    // Instanz ist zu erzeugen.
    CASE nAppType == APPTYPE_VIO .OR. nAppType == APPTYPE_NOVIO

    // RootCrt Instanz erzeugen.
   oCrt := RootCrt():New():Create()

   // RootCrt wird aktives Fenster und Ausgabeger„t.
   SetAppWindow ( oCrt )

  ENDCASE
RETURN

proc main
   set talk off
   set date german
   set wrap on
   set confirm on
   set dele on
   set exclusive off
   set cursor on
   set century on
   set typeahead to 50
   set epoch to 1930
   setmouse(.f.)

  bildschirm = 0
  set key -1 to gui   && F2 listet Bez�ge auf
  @12,12 say "Testbildschirm" get bildschirm pict 9999
  read
return

func GUI
LOCAL nEvent, mp1, mp2, oDlg
      // Browser im Fenster erzeugen
      // Dialogfenster versteckt erzeugen
  oDlg          := XbpDialog():new( oCRT,,{10,10}, {600,400},, .F. )
  oDlg:icon     := -1
  oDlg:taskList := .f.
  oDlg:title    := "Titel"
  oDlg:titlebar := .t.
  oDlg:maxbutton:= .F.
  oDlg:minbutton:= .F.
  oDlg:border:= XBPDLG_DLGBORDER
  oDlg:drawingArea:setFontCompoundName( "8.Helv" )
  oDlg:create()
	// Pushbutton erzeugen
  butt1:= XbpPushButton():new( oDlg ,, {10,10}, {100,30})
  butt1:caption := "Abbruch"
  butt1:create( , , {10,20}, {100,40} )
  butt1:activate := {|| PostAppEvent( xbeP_Close) }

  oDlg:show()
  SetAppFocus( oDlg )
	// Event loop
  nEvent := 0
  DO WHILE nEvent <> xbeP_Close
    nEvent := AppEvent( @mp1, @mp2, @oDlg )
    oDlg:HandleEvent( nEvent, mp1, mp2 )
  ENDDO
  oCrt:show()
  SetAppFocus( oCRT )
  SetAppWindow ( oCrt )
  oDlg:Destroy()
return .t.
Hier die dabei entstehende Fehlermeldung:
  • ------------------------------------------------------------------------------
    FEHLERPROTOKOLL von "F:\test\Test.EXE" Datum: 16.02.2008 15:21:58

    Xbase++ Version : Xbase++ (R) Version 1.90.331
    Betriebssystem : Windows XP 05.01 Build 02600 Service Pack 2
    ------------------------------------------------------------------------------
    oError:args :
    oError:canDefault : N
    oError:canRetry : N
    oError:canSubstitute: J
    oError:cargo : NIL
    oError:description : Zugriff auf Methode nicht erlaubt
    oError:filename :
    oError:genCode : 25
    oError:operation : row
    oError:osCode : 0
    oError:severity : 2
    oError:subCode : 4402
    oError:subSystem : BASE
    oError:thread : 1
    oError:tries : 0
    ------------------------------------------------------------------------------
    CALLSTACK:
    ------------------------------------------------------------------------------
    Aufgerufen von DISPSCOREBOARD(478)
    Aufgerufen von GETDOSETKEY(365)
    Aufgerufen von GETAPPLYKEY(119)
    Aufgerufen von GETREADER(92)
    Aufgerufen von READMODAL(58)
    Aufgerufen von MAIN(229)
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi

Code: Alles auswählen

      Aufgerufen von DISPSCOREBOARD(478)
      Aufgerufen von GETDOSETKEY(365)
      Aufgerufen von GETAPPLYKEY(119)
      Aufgerufen von GETREADER(92)
      Aufgerufen von READMODAL(5Cool
      Aufgerufen von MAIN(229)

was ist denn DISPSCOREBOARD ? Da tritt doch der Fehler auf, oder sehe ich das jetzt falsch?
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!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16509
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Wolfgang,
ich denke mal, dass Du nach dem Beenden des GUI-Fensters mit dem Browse noch in einigen Zeilen darauf zugreifen willst - zumindest scheint Deine erste Fehlermeldung mit dem maxRow darauf hinzudeuten!
Also scheint was in Deinem Ablauf bzw. der Reihenfolge etwas nicht zu stimmen.

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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Jou,

und das ist jetzt die andere Funktion, die oben steht. Deshalb meine ich ja, er soll den Code mal kurz posten und sagen welche Zeile da gemeint ist
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!!
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Hallo,
den gesamten Code habe ich um 3:35 angegeben. Aus mehr besteht mein kleines Testprogramm nicht. Der Code wurde mit Pbuild in eine EXE Datei gewandelt und aufgerufen.
Das Programm besteht aus Procedure Appsys() in der ich das xbpcrt Fenster baue. Dann kommt die Proc Main mit ein paar Einstellungen und einer say und Get Anweisung. Die Function GUI wird mit der F2 Taste aufgerufen.

Code: Alles auswählen

//
// Project - Definition - File created by PBUILD Version  1.90.331
// Date: 02.02.2008 Time: 08:33:17
//

[PROJECT]
    COMPILE       = xpp
    COMPILE_FLAGS = /q
    DEBUG         = yes
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = 
    RC_COMPILE    = arc
    RC_FLAGS      = /v
    PBUILD        = @project.txt
    MAKE          = 
    PROJECT.XPJ

[PROJECT.XPJ]
    Test.EXE

[test.EXE]
    Test.PRG
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Aus mehr besteht mein kleines Testprogramm nicht.
Das kann ja nicht sein. Denn die Fehlermeldung kommt aus einer Funktion, die In Deinem geposteten Code garnicht vorkommt.

Oder sollte ich da was übersehen haben?

Jan
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Ehrlich,
kann man in einen Forum eine PRG Datei mit dem Code hochladen?

Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: CRT Fenster GUI Fenster und wieder zurück

Beitrag von AUGE_OHR »

hi,
saul hat geschrieben:

Code: Alles auswählen

      butt1:activate := {|| PostAppEvent( xbeP_Close) }
      DO WHILE nEvent <> xbeP_Close
Leider bricht das Programm dann ab. Ich denke der Rücksprung/schritt Wo liegt mein Fehler
xbeP_Close will "quit" deine Application !

versuche mal :

Code: Alles auswählen

   
LOCAL   lExit  :=  .F.
   butt1:activate := {|| lExit  :=  .T. }
   DO WHILE .NOT. lExit
gruss by OHR
Jimmy
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Hallo,
stimmt das war wahrscheinlich der Fehler, aber das GUI Fenster bleibt vor dem CRT Fenster obwohl ich das Objekt mit

Code: Alles auswählen

  oDlg:Destroy()
meine gelöscht zu haben. In dem GUI Fenster wird aber der Pushbutton gelöscht.

Bei dieser Gelegenheit, kennt jemand Bücher zu Xbase++ mit einem zusammenhänden einfachen Programmbeispiel, z.B. Adressverwaltung oder ähnliches?

Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi,

hätte ich mal meine 1.Vermutung kund getan. Sowas blödes. Naja..

Tja, Literatur über Xbase++? Damit ist die Welt leider schwach besät worden bisher.

Entweder Du gehst hier die einzelnen Threads durch und sammelst Dir zusammen, was Du hier so findest, oder

Du fragst Dich weiter durch, wie wir alle hier machen,

oder.....

es gibt ein paar alte Anleitungen, aber ob die weiterhelfen?

Ich schau mal nach, was ich noch so alles im Töpfchen habe.....

Vielleicht hast Du ja Glück
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!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
saul hat geschrieben: Ziel ist mit der F2 Taste mir in einem GUI Fenster während eines read Daten mit xbpbrowse() anzeigen zu lassen. Da habe ich erstmal mit dem dazugehörigen Fenster angefangen.

Code: Alles auswählen

PROCEDURE AppSys()
...
      // XbpCRT-Fenster erzeugen
      oCrt := XbpCrt():New ( NIL, NIL, aPos, DEF_ROWS, DEF_COLS )
...
      // RootCrt wird aktives Fenster und Ausgabeger„t.
      SetAppWindow ( oCrt )
RETURN

proc main
...
   setmouse(.f.)
...
  set key -1 to gui   && F2 listet Bez�ge auf
  @12,12 say "Testbildschirm" get bildschirm pict 9999
  read
return

func GUI
...
  oDlg          := XbpDialog():new( oCRT,,{10,10}, {600,400},, .F. )
...
  oDlg:show()
  SetAppFocus( oDlg )
...
  oCrt:show()
  SetAppFocus( oCRT )
  SetAppWindow ( oCrt )
  oDlg:Destroy()
return .t.
Hier die dabei entstehende Fehlermeldung:
  • ------------------------------------------------------------------------------
    FEHLERPROTOKOLL von "F:\test\Test.EXE" Datum: 16.02.2008 15:21:58
    ...
    oError:description : Zugriff auf Methode nicht erlaubt
    ...
    oError:operation : row
Es sind gleich mehrere Fehler drin !
a.) du definierst oCRT in APPSYS ... und benutzt es in "GUI" ... wie ?
b.) setmouse() sollte IMHO für GUI auf .T. sein (GETSYSX.PRG benutzen)

der "grösste" Fehler jedoch ist das du die "GUI" Funktion nicht als Thread
laufen läst bzw. den oCRT Thread nicht "anhältst". Dieser läuft also weiter
während du SetAppFocus( oDlg ) machst. Damit ist dann keine "CRT"
Ausgabe mehr möglich und wenn er zum "@12,12 say" kommt "kennt"
er "row" nicht.

Tatsächlich ist diese Art von "Hybrid" Lösung fast die schwerste Art von
Xbase++ die es gibt da du beim "umschalten" auf GUI immer darauf
achten musst das die "CRT" Fenster keine Ausgabe mehr machen dürfen.
Wenn also z.b. deine "alte DOS" Anwendung mit "timeout" gearbeitet hat
z.b. eine GET nach einiger Zeit automatisch schliessen etc. dann knallt er
dir "irgendwann" die "CRT" Ausgabe in deine "GUI" Ausgabe ...

Als Ansatz hab ich dann mal eine "Multi-Thread-CRT" entwickelt die ich
aus C:\ALASKA\XPPW32\SOURCE\samples\basics\THREAD\Coffee.prg
entnommen habe, aber "perfekt" ist auch die nicht.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

hi,
saul hat geschrieben: ... aber das GUI Fenster bleibt vor dem CRT Fenster obwohl ich das Objekt mit

Code: Alles auswählen

  oDlg:Destroy()
meine gelöscht zu haben. In dem GUI Fenster wird aber der Pushbutton gelöscht.
stelle deinen Code von

Code: Alles auswählen

  oCrt:show() 
  SetAppFocus( oCRT ) 
  SetAppWindow ( oCrt ) 
  oDlg:Destroy()

auf
  oDlg:Destroy()
  SetAppWindow ( oCrt ) 
  SetAppFocus( oCRT ) 
  oCrt:show() 
um.
gruss by OHR
Jimmy
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Ja,
das alles habe ich befürchtet und daher GUI immer vor mir hergeschoben (schon einige Jahre).
Mir fehlte immer eine Anleitung. Die xbase++ Hilfe zeigt immer nur einzelne Dinge, aber nicht den ganzen Zusammenhang.
Da ich keine Literatur über xbase++ finde, werde ich eventuell doch auf eine andere Sprache umsteigen.
Vielen Dank für Eure Hilfe.
mfg
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Wolfgang,

einen Tipp, frage hier einfach nach und fange an Dich mit GUI zu befassen. Jan und ich sind leuchtende Beispiele dafür, dass es geht.

Oder wenn es der Textmodus ist, dann frage darüber nach.

Den Ruck, den mußt Du Dir geben. Ich kann Dir hier sagen, nach ein paar Wochen wirst Du den Kopf schütteln und Dich fragen, warum Du es nicht sofort gemacht hast.

Gut, es ist nicht alles einfach, aber es kommt mit der Zeit.

Ich wollte anfänglich nicht auf Martin usw. hören, aber habe es dann doch getan.

Eine neue Sprache, wenn Du sie dann auch noch von Grund auf erlernen mußt, wird Dich nicht glücklicher machen. Xbase++ ist der Knaller.

Frage uns hier ein Loch in den Bauch, das habe ich auch die ganze Zeit gemacht und mache es immer noch. Es wird Dir keiner böse sein.

Ist denn keine XUG in Deiner Nähe?
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!!
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

Beitrag von saul »

Euer Trost ist prima.
Was ist denn eine XUG? Ich wohne ca. 50km nordöstlich von Frankfurt (Main).

Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

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

Beitrag von AUGE_OHR »

hi,
saul hat geschrieben: das alles habe ich befürchtet und daher GUI immer vor mir hergeschoben (schon einige Jahre).
Mir fehlte immer eine Anleitung. Die xbase++ Hilfe zeigt immer nur einzelne Dinge, aber nicht den ganzen Zusammenhang.
Dein ersten Ansatz würde ich "umkehren". Wie mit der "TopDown" würde
ich mir ein GUI "Application Frame" entwerfen und als Menupunkte deine
Text Application als eigenen Thread im "Fenster" laufen lassen.

Nimm also eine "leer" AppSys() in baue dir in Main ein XbpDialog (mit
Menu ...). Die oDlg:drawingArea nimmst du dann als Parent für eine oCRT.

Code: Alles auswählen

oCrt := XbpCrt():New ( oDlg:drawingArea, NIL, aPos, DEF_ROWS, DEF_COLS )
gruss by OHR
Jimmy
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Wolfgang,

du solltest dir mal eXPress++ von Roger Donnay anschauen, ich habe damit
sehr gute Erfahrung gemacht.

Gruß
Alfred
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Beitrag von Wolfgang Ciriack »

Ich kann Alfred nur zustimmen, wenn ich damals nicht eXPress++ gefunden hätte, wäre ich auch nicht bei XBase++ geblieben.
Viele Grüße
Wolfgang
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag von Alfred »

Hallo Wolfgang Saul,

hier ein Beispiel wie man mit Express eine GUI erstellt:

Code: Alles auswählen

#include "dcdialog.ch"

PROCEDURE MAIN()

LOCAL GETLIST := {}, Getoptions
SET DATE GERMAN
SET CHARSET TO ANSI

@ 15,20 DCPUSHBUTTON ;
    CAPTION {||'Start'} ;
    SIZE 10, 1.5 ;
    Action{||msgbox("Hallo Wolfgang")}

DCGETOPTIONS ;
     SAYLEFT ;
     WINDOWHEIGHT 450 ;
     WINDOWWIDTH 750

DCREAD GUI ;  
    TITLE 'eXPress++-Beispiel für Wolfgang' ; 
    MODAL ;
    OPTIONS GetOptions 

RETURN

Procedure APPSYS()
RETURN
Entscheidend ist, dass man seine alte Denkweise beibehalten kann.

Gruß
Alfred
Antworten