Static im Mainfenster [ERLEDIGT]

Moderator: Moderatoren

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

Static im Mainfenster [ERLEDIGT]

Beitrag von Manfred »

Mal sehen, ob ich es rüberbringen kann:

das ist ist der Maindialog

Code: Alles auswählen

*                                                                              *
*                                                                              *
*                                                                              *
*                                                                              *
* letzte Änderung:10.11.2010                                                   *
********************************************************************************
* routenverfolgung.prg                                                         *
* (c) Manfred Kunz Juli 2010                                                   *
********************************************************************************
#include "appevent.ch"
#include "dcdialog.ch"
#include "dcgra.ch"
#include "dcmsg.ch"
#include "routenverfolgung.ch"
#include "nls.ch"
#include "xbp.ch"
#include "q:\include\inkey.ch"

#pragma Library( "XBTBASE1.LIB")                                                // wird dadurch in keinem
#pragma Library( "XBTBASE2.LIB")                                                // Projektfile mehr benötigt als Angabe
#pragma Library( "XppUI2.lib" )                                                 // für den XbpPrintDialog()
#pragma Library( "dclipx.lib" )

#pragma Library ("q:\zusaetze_gui\allgemein\mk_zusaetze.lib")
********************************************************************************
PROCEDURE appsys()
          RETURN
********************************************************************************
PROCEDURE main()
          LOCAL getlist       := {}
          LOCAL GetOptions

          LOCAL nStaticButtonBreite := 150
          LOCAL nStatusBarHoehe     := 35

          LOCAL oDateiMenu          := NIL
          LOCAL oDateneingang       := NIL
          LOCAL oEinstellung        := NIL
          LOCAL oGruppeStaticButton := NIL
          LOCAL oHilfeMenu          := NIL
          LOCAL oImportmenu         := NIL
          LOCAL oMenuBar            := NIL
          LOCAL oMessageBox         := NIL
          LOCAL oSeparator          := NIL
          LOCAL oSeriellMsg         := NIL
          LOCAL oSignale            := signale():new()
          LOCAL oStammdaten         := NIL
          LOCAL oStaticButton       := NIL
          LOCAL oStaticMsg          := NIL
          LOCAL oStaticWeb          := NIL
          LOCAL oStatus1            := NIL
          LOCAL oStatusbar          := NIL
          LOCAL oText               := NIL
          LOCAL oThread             := seriellewache():new()
          LOCAL oThreadMsg          := NIL
//          LOCAL oWebBrowser         := NIL

          MEMVAR oBild
          MEMVAR oHauptDialog
          MEMVAR oMessage
          MEMVAR oPruefen
          MEMVAR oSysPara

          PUBLIC oHauptDialog
          PUBLIC oMessage
          PUBLIC oSysPara                                                       // wegen Thread

          oBild    := ""
          oMessage := nachricht():new()
          oPruefen := pruefen():new()
          oSysPara := systemParameter():new()

          DC_LangMsg(DCLANG_GERMAN)
          DC_DotHotkey(0)                                                       // damit das Dot-Prompt Tool weg ist (kann man auch umlenken)
          SetLocale( NLS_ICURRENCYEURO, "1" )
          SetLocale( NLS_SCURRENCY, Chr(213) )

          oEinstellung := einstellung():new()
          oEinstellung:db_oeffnen(,,,,,,,.T.)

          oEinstellung:schliesse_datenbank()
          DCMENUBAR oMenuBar;
                 ID 999;
          OWNERDRAW
//------------------------------------------------------------------------------
          DCSUBMENU oDateiMenu;
             PARENT oMenuBar;
             PROMPT "~Datei"

         DCMENUITEM "~Einstellungen";
             ACTION {|| einstellungen(oMessageBox) };
            MESSAGE "Programmeinstellungen" INTO oMessageBox;
             PARENT oDateiMenu

         DCMENUITEM oSeparator;
             PARENT oDateiMenu;
          SEPARATOR

          DCSUBMENU oImportmenu;
             PARENT oDateiMenu;
             PROMPT "~Importieren"

         DCMENUITEM "~Fahrplanverwaltung";
             ACTION {|| importieren() };
            MESSAGE "Import aus Fahrplanverwaltung" INTO oMessageBox;
             PARENT oImportMenu

         DCMENUITEM oSeparator;
             PARENT oDateiMenu;
          SEPARATOR

         DCMENUITEM "~Beenden";
             ACTION {|| IF(AppQuit("",.T.,"Programmende"),DC_ReadGuiEvent(DCGUI_EXIT_OK,GetList),NIL)};
            MESSAGE "Programmende" INTO oMessageBox;
             PARENT oDateiMenu
//------------------------------------------------------------------------------
          DCSUBMENU oDateneingang;
             PARENT oMenuBar;
             PROMPT "Daten~Empfang"

         DCMENUITEM "St~art";
             ACTION {|| oThread:start("datenempfang",oThread,oDateneingang)};
            MESSAGE "startet den Datenempfang über die serielle Schnittstelle" INTO oMessageBox;
             PARENT oDateneingang

         DCMENUITEM "St~op";
             ACTION {|| oThread:terminate()};
            MESSAGE "Stoppt den Datenempfang über die serielle Schnittstelle" INTO oMessageBox;
             PARENT oDateneingang

         DCMENUITEM "~Signaleingangskontrolle";
             ACTION {|| oDateneingang:disableItem(3),;
                        signalbrowse(),;
                        oDateneingang:enableItem(3);
                    };
            MESSAGE "Öffnet ein Browsefenster in dem die derzeitigen Signaleingänge angezeigt werden" INTO oMessageBox;
             PARENT oDateneingang
//------------------------------------------------------------------------------
          DCSUBMENU oStammdaten;
             PARENT oMenuBar;
             PROMPT "~Stammdaten"

         DCMENUITEM oSeparator;
          SEPARATOR;
             PARENT oStammdaten

         DCMENUITEM "~Meldepunkte";
             ACTION {|| meldepunktezeigen() };
            MESSAGE "im Datenbestand befindliche Meldepunkte" INTO oMessageBox;
             PARENT oStammdaten
//------------------------------------------------------------------------------
          DCSUBMENU oHilfeMenu;
             PARENT oMenuBar;
             PROMPT "~Hilfe"

         DCMENUITEM oSeparator;
             PARENT oHilfeMenu;
          SEPARATOR

         DCMENUITEM "~Info";
             ACTION {|| info() };
            MESSAGE "Programminformationen" INTO oMessageBox;
             PARENT oHilfeMenu
//------------------------------------------------------------------------------
        DCSTATUSBAR oStatusbar;
              ALIGN DCGUI_ALIGN_BOTTOM;
             HEIGHT nStatusBarHoehe
        @ 3,0 DCSTATIC;
                OBJECT oStaticMsg;
                PARENT oStatusBar;
                  SIZE 100,nStatusBarHoehe;
                  TYPE XBPSTATIC_TYPE_RECESSEDBOX
        @ 3,0 DCSTATIC;
                OBJECT oThreadMsg;
                PARENT oStatusBar;
                  SIZE 220,nStatusBarHoehe;
                  TYPE XBPSTATIC_TYPE_RECESSEDBOX
        @ 3,0 DCSTATIC;
                OBJECT oSeriellMsg;
                PARENT oStatusBar;
                  SIZE 200,nStatusBarHoehe;
                  TYPE XBPSTATIC_TYPE_RECESSEDBOX
        @ 3,0 DCSTATIC;
                OBJECT oStatus1;
                PARENT oStatusBar;
                  SIZE 300,nStatusBarHoehe;
                  TYPE XBPSTATIC_TYPE_RECESSEDBOX

        @ 2,2 DCMESSAGEBOX;
                     COLOR GRA_CLR_BLUE, GRA_CLR_BACKGROUND;
                    OBJECT oMessagebox;
                    PARENT oStaticMsg;
                      SIZE 500,nStatusBarHoehe MOTION;
                      TYPE XBPSTATIC_TYPE_TEXT
        @ 2,2 DCSAY "";
             OBJECT oText;
             PARENT oThreadMsg;
               SIZE 200,20
        @ 2,2 DCSAY "Datenempfang gestoppt";
             OBJECT oText;
             PARENT oSeriellMsg;
               SIZE 300,20
        @ 2,2 DCSAY "";
             OBJECT oText;
             PARENT oStatus1;
               SIZE 300,20
//------------------------------------------------------------------------------
     @ 0,0 DCSTATIC;
             OBJECT oStaticWeb;
               TYPE XBPSTATIC_TYPE_RECESSEDRECT
     @ 0,0 DCSTATIC;
             OBJECT oStaticButton;
               TYPE XBPSTATIC_TYPE_RECESSEDRECT
//------------------------------------------------------------------------------
     @ 15,15 DCGROUP oGruppeStaticButton;
           CAPTION "Auswahl";
             PARENT oStaticButton;
               SIZE DCGUI_PARENTWIDTH-30,DCGUI_PARENTHEIGHT-30
//------------------------------------------------------------------------------
       DCGETOPTIONS;
         ABORTQUERY MSG {|| AppQuit("",.T.,"Programmende mit ESC") };
         AUTORESIZE;
     AUTOWINDOWMENU;
             BORDER XBPDLG_SIZEBORDER;
         CLOSEQUERY MSG {|| AppQuit("",.T.,"Programmende über X-Button") };
               ICON ICON_APPLICATION;
              PIXEL;
         SAYOPTIONS XBPSTATIC_TEXT_VCENTER;
              TITLE TokenUpper(SubStr(oSysPara:cProgrammName,1,Rat(".",oSysPara:cProgrammName)-1))

             DCREAD GUI;
               EVAL {|o| oHauptdialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED),;
                         oDateneingang:disableItem(2),;
                         oStaticWeb:setPos( {0,0 } ),;
                         oStaticButton:setPos( {oHauptdialog:clientsize[1]-nStaticButtonBreite,0 } ),;
                         oStaticWeb:setSize( { oHauptdialog:clientsize[1]-nStaticButtonBreite,oHauptdialog:clientsize[2]-nStatusBarHoehe } ),;
                         oStaticButton:setSize( { nStaticButtonBreite,oHauptdialog:clientsize[2] } ) ,;
                         pruefeMeldepunktUpdate(),;
                         SetTimerEvent(10000, {|| starteThread(oThread,oEinstellung:neustart,oDatenEingang,oSignale) } ),;
                         test(oHauptDialog,oStaticWeb,oStaticButton);
                    };
            OPTIONS GetOptions;
             PARENT @oHauptDialog

          RETURN
********************************************************************************
********************************************************************************
FUNCTION test(var1,var2,var3)
         altd()
         RETURN(.T.)
Das Problem was ich habe (wird sicherlich wieder Mumpits sein) ist, in der Eval Schleife von DCREAD positioniere ich die beiden Statics (oStaticWeb und oStaticButtons) und setze die Größe. Wenn ich dann über die testfunktion den Debugger aufrufe, dann sieht man auch die Statics auf der Fläche. Sobald aber F9 für weiter gedrückt wird und der Eval Vorgang beendet ist, sind die Statics verschwunden und ich habe keine Ahnung wohin. Noch weniger, warum.

Mir fällt gerade noch was eine. In das Static oStaticWeb will ich eigentlich ein DCHTMLVIEWER bauen. Ich denke mal, das es wohl geht, wie ich es mir ausdenke? Warum auch nicht, oder?
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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Static im Mainfenster

Beitrag von Herbert »

Interessant, mal so einen Code zu sehen...
Hmm, und ich dachte die @ x,y - Geschichte sei mit der DOS-Umgebung definitiv verschwunden...

Nichts mehr zum Weiterlesen, ich kann dir nicht helfen :^o
Grüsse Herbert
Immer in Bewegung...
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: Static im Mainfenster

Beitrag von Tom »

Ich vermute, dass es am AutoResize liegt. Du positionierst die beiden Elemente an 0,0 und manipulierst die Postion und Größe dann mit SetPos() und SetSize() (übrigens gibt es SetPosAndSize()!). Sobald AutoResize (vermutlich auch DC_GetRefresh(GetList)) läuft, holt sich eXpress++ die ursprünglichen Positionen wieder aus der GetList. Da beide Objekte keine initialen Großenangaben haben (SIZE x,y fehlt jeweils), setzt eXpress++ beide wieder an 0,0 und minimiert sie auf 0,0. Vermute ich. Gib ihnen mal Anfangsgrößen. Nimm mal testweise das AutoResize raus. Übrigens hat Roger für alle Objekte implizite Methoden DCSetSize() und DCSetPos() eingeführt, die das dann auch in der GetList reflektieren und mit eXpress++-Zeilen-/Spaltenwerten arbeiten können (also oStatic:DCSetSize({1,1}) wie bei @ 1,1 DCSAY ...). Ich weiß aber nicht, ob das schon in der aktuellen Version enthalten ist. Die nötigen Codeänderungen findest Du in Rogers Board in diesem Thread (relativ am Ende):

http://bb.donnay-software.com:8080/phpB ... ?f=2&t=134

Eine RecessedBox als Parent für den HtmlViewer sollte funktionieren.
Herzlich,
Tom
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: Static im Mainfenster

Beitrag von Jan »

Hallo Herbert,

das ist ja der Vorteil von eXpres++ - man kann die alten Clipper-Angaben weiterverwenden, und das Tool rechnet das dann passend auf GUI um und "übergibt" das entsprechend and Xbase++.

Aber weiterhelfen kann ich auch nicht, hab von eXpress++ Null Ahnung. Sorry.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hi Tom,

das mit setposandsize() kenne ich, aber in Testphasen lasse ich lieber alles einzeln durchlaufen um zu sehen, was wann passiert. (die testfunktion stand anfangs etwas höher)

Das mit den Grundwerten hatte ich absichtlich weggelassen, weil ich ja weiß, dass ich die Größe und die Pos später neu setze. Mich wundert es nur, dass es bisher immer geklappt hat bei anderen Modulen. Allerdings hatte ich es bisher nicht im Hauptdialog probiert.

Aber Deine Vorschläge werde ich mal sofort umsetzen und sehen, was mich dann erwartet.
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
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: Static im Mainfenster

Beitrag von Tom »

Hallo, Jan.

Na ja, von "umrechnen" kann man schon reden, aber von "übergeben" wohl eher nicht.

Dieser eXpress-Code:

Code: Alles auswählen

#include 'dcdialog.ch'
#pragma library('dclipx.lib')

FUNCTION Main()
cName := Space(30)
@ 1,1 DCSAY 'Name:' GET cName PICTURE Replicate("!",30) SAYSIZE 10
DCREAD GUI FIT TITLE 'Test' ADDBUTTONS

RETURN nil
erzeugt ein skaliertes Fenster, in dem sich ein Static und ein SLE befinden. In das SLE kann man nur Großbuchstaben tippen. Es hat ein Kontextmenü. Das ensteht dadurch, dass über den Präprozessor aus diesen Kommandos Einträge in der GetList abgelegt werden. Aus der GetList erzeugt die eingebundene DLL bzw. der GetList-Reader Objekte. Sie sind mit einer Unzahl von vorgefertigen Methoden und Eigenschaften ausgestattet. Die Positionierung erfolgt abhängig von (wählbaren) Faktoren. Standardmäßig ist eine "Zeile" 20 Pixel hoch und eine "Spalte" 7 Pixel breit. Das zählt von links oben, also wie wir es aus Clipper kennen. Das Ergebnis (gelinkt mit /PM:PM) sieht unter XP so aus wie im Anhang zu sehen. Analog kann man mit allen XbParts verfahren. Eine zusätzliche DESIGN-Option erlaubt es, das entstehende Fenster zur Laufzeit zu ändern (Objekte verschieben), was sofort in den Quellcode durchgeschrieben wird.

Die entstehenden Objekte sind mit allen bekannten Methoden manipulierbar.
Dateianhänge
simple.jpg
simple.jpg (11.11 KiB) 6883 mal betrachtet
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Zwischenstand,

eine Grundvorgabe der Größe und der Position bewirkt nichts.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Habe ich denn eine Chance direkt danach irgendwo anzusetzen um im Debugger zu testen? Eval ist doch eigentlich schon recht am Ende der ganzen Erzeugung!?
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Autoresize ist es.

Allerdings selbst wenn ich es entferne, dann verschwindet trotzdem die Gruppe im StaticButton.
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
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: Static im Mainfenster

Beitrag von Tom »

Jetzt verstehe ich erst richtig. Du siehst die Objekte nur (kurz), wenn die Testfunktion aufgerufen wird, aber danach verschwinden sie. Das liegt daran, dass das EVAL ausgeführt wird, bevor der komplette Dialogaufbau fertig ist. Danach resized eXpress++ nochmal, deshalb verschwinden sie. Du könntest die beiden Objekte mal PRIVATE machen und mit Alt-D DCDOT aufrufen. Dort könntest Du sie dann in der Kommandozeile positionieren, also testweise: oStatic:SetPos({100,100}) oder ähnlich.

Aber - warum überhaupt so kompliziert? Es gibt für die Positionierung auch Konstanten wie DCGUI_PARENTHEIGHT und DCGUI_PARENTWIDTH. Schau mal in die DCDIALOG.CH. Du könntest ein Objekt also auch so platzieren:

Code: Alles auswählen

@ 1, DCGUI_PARENTWIDTH-5 DCSAY 'Test'
Damit würde es in der ersten Zeile und immer - auch nach einem Resize - fünf Spalten links vom rechten Fensterrand angezeigt werden!
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hm,

da hatte ich ja bisher so gemacht, aber ich meine, die Statusbar hat dann dazwischen gefunkt. Oder wird die bei dabei berücksichtigt? Müßte ich schnell nochmal testen. Bei clientsize() meine ich, muß die getrennt abgezogen werden.
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
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: Static im Mainfenster

Beitrag von Tom »

Hallo, Manfred.

Ja, ich glaube, da gab/gibt es ein Problem. Roger baut die Statusbars ein, nachdem alle anderen Objekte erzeugt worden sind. Möglicherweise musst Du dem also bei der Positionierung mit PARENTHEIGHT/WIDTH Rechnung tragen.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Ganz so einfach ist das aber nicht. Ich habe es jetzt mal so gemacht:

Code: Alles auswählen


//------------------------------------------------------------------------------
     @ 0,0 DCSTATIC;
             OBJECT oStaticWeb;
               SIZE DCGUI_PARENTWIDTH-nStaticButtonBreite,DCGUI_PARENTHEIGHT;
               TYPE XBPSTATIC_TYPE_RECESSEDRECT
     @ 0,DCGUI_PARENTWIDTH - nStaticButtonBreite DCSTATIC;
                                                  OBJECT oStaticButton;
                                                    SIZE nStaticButtonBreite,DCGUI_PARENTHEIGHT;
                                                    TYPE XBPSTATIC_TYPE_RECESSEDRECT
//------------------------------------------------------------------------------
     @ 15,15 DCGROUP oGruppeStaticButton;
             CAPTION "Auswahl";
              PARENT oStaticButton;
                SIZE DCGUI_PARENTWIDTH-30,DCGUI_PARENTHEIGHT-30
//------------------------------------------------------------------------------
       DCGETOPTIONS;
         ABORTQUERY MSG {|| AppQuit("",.T.,"Programmende mit ESC") };
         AUTORESIZE;
     AUTOWINDOWMENU;
             BORDER XBPDLG_SIZEBORDER;
         CLOSEQUERY MSG {|| AppQuit("",.T.,"Programmende über X-Button") };
               ICON ICON_APPLICATION;
              PIXEL;
         SAYOPTIONS XBPSTATIC_TEXT_VCENTER;
              TITLE TokenUpper(SubStr(oSysPara:cProgrammName,1,Rat(".",oSysPara:cProgrammName)-1))

             DCREAD GUI;
               EVAL {|o| oHauptdialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED),;
                         oDateneingang:disableItem(2),;
                         pruefeMeldepunktUpdate(),;
                         SetTimerEvent(10000, {|| starteThread(oThread,oEinstellung:neustart,oDatenEingang,oSignale) } );
                    };
            OPTIONS GetOptions;
             PARENT @oHauptDialog

          RETURN
jetzt verschwinden sie zwar nicht mehr, aber sie decken auch nur noch 3/4 der Fläche ab und sind falsch formatiert. das war es auch, weshalb ich die andere Lösung eingebaut hatte.
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
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: Static im Mainfenster

Beitrag von Tom »

Hallo, Manfred.

Ich habe damit auch gerade herumgespielt. Weil die Statusbars nach dem Erstellen des eigentlichen Dialogs eingefügt werden, sind die Rückgabewerte der Codeblöcke, die Du mit DCGUI_PARENTHEIGHT einfügst, nicht ganz richtig. Das ist auch die Ursache dafür, dass Deine Controls verschwinden, weil nach dem Einfügen der Statusbar noch ein Autoresize durchgeführt wird.

Es müsste so hinzukriegen sein:

Code: Alles auswählen

* Vor dem DCREAD:
DCUSEREVENT xbeP_User + 200 ACTION {||<hier das Resize/Repos der Statics}

DCREAD ... EVAL ... POSTEVENT xbeP_User+200
Damit existiert die Statusbar schon und die Positionierung dürfte die richtige ClientSize berücksichtigen.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hi Tom,

vielleicht habe ich auch nicht so ganz verstanden was Du meinst, aber so habe ich das eingebaut.

Code: Alles auswählen

//------------------------------------------------------------------------------
     @ 0,0 DCSTATIC;
             OBJECT oStaticWeb;
               TYPE XBPSTATIC_TYPE_RECESSEDRECT
     @ 0,0 DCSTATIC;
             OBJECT oStaticButton;
               TYPE XBPSTATIC_TYPE_RECESSEDRECT
//------------------------------------------------------------------------------
     @ 15,15 DCGROUP oGruppeStaticButton;
             CAPTION "Auswahl";
              PARENT oStaticButton;
                SIZE DCGUI_PARENTWIDTH-30,DCGUI_PARENTHEIGHT-30
//------------------------------------------------------------------------------

       DCGETOPTIONS;
         ABORTQUERY MSG {|| AppQuit("",.T.,"Programmende mit ESC") };
         AUTORESIZE;
     AUTOWINDOWMENU;
             BORDER XBPDLG_SIZEBORDER;
         CLOSEQUERY MSG {|| AppQuit("",.T.,"Programmende über X-Button") };
               ICON ICON_APPLICATION;
              PIXEL;
         SAYOPTIONS XBPSTATIC_TEXT_VCENTER;
              TITLE TokenUpper(SubStr(oSysPara:cProgrammName,1,Rat(".",oSysPara:cProgrammName)-1))

        DCUSEREVENT xbeP_User + 200 ACTION {|| oStaticWeb:setPos( {0,0}),;
                                               oStaticButton:setPos( {0,0}),;
                                               oStaticWeb:setSize( { oHauptdialog:clientsize[1]-nStaticButtonBreite,oHauptdialog:clientsize[2]-nStatusBarHoehe } ),;
                                               oStaticButton:setSize( { nStaticButtonBreite,oHauptdialog:clientsize[2] } )}

             DCREAD GUI;
               EVAL {|o| oHauptdialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED),;
                         oDateneingang:disableItem(2),;
                         pruefeMeldepunktUpdate(),;
                         SetTimerEvent(10000, {|| starteThread(oThread,oEinstellung:neustart,oDatenEingang,oSignale) } );
                    };
            OPTIONS GetOptions;
             PARENT @oHauptDialog;
          POSTEVENT xbeP_User+200

          RETURN
Es klappt aber leider nicht. Ich habe in dem Action Codeblock die test() Funktion für altd() vorher und nachher eingebaut, aber die wird gar nicht angesprungen.
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
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: Static im Mainfenster

Beitrag von Tom »

Bei mir geht das so. Nimm mal die Leerzeichen aus DCUSEREVENT "xbeP_User + 200" raus (also xbeP_User+200).
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hi Tom,

so habe ich das jetzt gemacht. Aber die Test() Funktion wird nur in DCREAD GUI angesprungen. Nicht in dem Actionblock. Das müßte es doch aber tun, oder?

Code: Alles auswählen

       DCGETOPTIONS;
         ABORTQUERY MSG {|| AppQuit("",.T.,"Programmende mit ESC") };
         AUTORESIZE;
     AUTOWINDOWMENU;
             BORDER XBPDLG_SIZEBORDER;
         CLOSEQUERY MSG {|| AppQuit("",.T.,"Programmende über X-Button") };
               ICON ICON_APPLICATION;
              PIXEL;
         SAYOPTIONS XBPSTATIC_TEXT_VCENTER;
              TITLE TokenUpper(SubStr(oSysPara:cProgrammName,1,Rat(".",oSysPara:cProgrammName)-1))

        DCUSEREVENT xbeP_User+200 ACTION {|| test(oStaticWeb,oStaticButton),;
                                             oStaticWeb:setPos( {0,0}),;
                                             oStaticButton:setPos( {0,0}),;
                                             oStaticWeb:setSize( { oHauptdialog:clientsize[1]-nStaticButtonBreite,oHauptdialog:clientsize[2]-nStatusBarHoehe } ),;
                                             oStaticButton:setSize( { nStaticButtonBreite,oHauptdialog:clientsize[2] } ),;
                                             test(oStaticWeb,oStaticButton);
                                           }

             DCREAD GUI;
               EVAL {|o| oHauptdialog:setFrameState(XBPDLG_FRAMESTAT_MAXIMIZED),;
                         oDateneingang:disableItem(2),;
                         test(oStaticWeb,oStaticButton),;
                         pruefeMeldepunktUpdate(),;
                         SetTimerEvent(10000, {|| starteThread(oThread,oEinstellung:neustart,oDatenEingang,oSignale) } );
                    };
            OPTIONS GetOptions;
             PARENT @oHauptDialog;
          POSTEVENT xbeP_User+200

          RETURN
********************************************************************************
FUNCTION test(var1,var2,var3)
         altd()
         RETURN(.T.)
irgendwas muß anders bei mir sei, als bei Dir.....
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
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Static im Mainfenster

Beitrag von Herbert »

Jan hat geschrieben:Hallo Herbert,
das ist ja der Vorteil von eXpres++ - man kann die alten Clipper-Angaben weiterverwenden, und das Tool rechnet das dann passend auf GUI um und "übergibt" das entsprechend and Xbase++.
Jan
Die Syntax hat wenig mit Xbase++ gemeinsam und auch wenig mit Windows-API...

So bestehen doch viele Gefahren:
Zum einen verdeutlicht diese Diskussion hier die Sache, dass ein darübergestülptes Verhalten zu Problemen führt und zum Anderen geht eben das "Windows-Denken" nicht so tief - was allerdings auch ein Vorteil sein kann.

Und weiter wird mir nun klar, warum sich einige Leute hier nicht so sehr an die klassischen Windows-Standards halten [-X
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Static im Mainfenster

Beitrag von Wolfgang Ciriack »

[quote]das hat teilweise auch historische Gründe, z.B. bestanden meine Kunden im Jahr 2002 bei der Umstellung von DOS/Clipper auf XBase++/Windows darauf,
weiterhin das Programm so von der Tastatur her zu bedienen, wie sie es gewohnt waren, nämlich z.B. mit ENTER von Feld zu Feld zu kommen.[quote]

Das mache ich, indem ich z. B. das Enter in der Eventschleife abfrage und dann das Verlassen des SLE auslöse. Geht sehr einfach, und man kann da auch noch andeer "Spielereien" mit veranstalten. Ganz nach eigenen Vorlieben bzw. Kundenwunsch.

Aber es ist richtig, das die Tools wie eXpress++ das automatisch alles schon eingebaut haben, die Umsetzung ist dann einfacher. Wobei: Herbert, das sind dann trotzdem waschechte Windows-GUI-Programme! Es ist ja egal, wie man die Positionen im Quellcode angibt - ob in Clippermanier mit @ oder in Xbase++-Weise mit Pixelangaben. Wihctig ist doch, was dann beim Programmaufruf angezeigt wird.

Jan
Viele Grüße
Wolfgang
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hi Tom,

ich habe mir das einmal im Debugger angesehen. In _dcgetbx.prg an Zeile 3573 (bei mir)

Code: Alles auswählen

IF !Empty(::postEvent)
  PostAppEvent(::postEvent,,,::parentDlg)
ENDIF
wird auch ein PostAppEvent verschickt. Aber es passiert nichts am Bildschirm.
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
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hi Tom,

ich habe jetzt etliches ausprobiert. Ich habe das :setFrameState() entfernt, das hat zumindest einen Teil der Schuld. Aber trotzdem kommt immer noch Murks dabei heraus.

Hast Du denn Dein Beispiel mit DCUSEREVENT in ein paar Zeilen gepackt, die Du mir evtl. mal zukommen lassen könntest um mal testen zu können, wie es bei mir reagiert? Vielleicht auch als fertige EXE, die bei Dir genau das macht, was sie soll?
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
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: Static im Mainfenster

Beitrag von Tom »

Hallo, Manfred.

Ich versuche, noch im Laufe des Tages ein kompilierbares Beispiel zu bauen.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Das wäre sehr nett....
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
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: Static im Mainfenster

Beitrag von Tom »

Hallo, Manfred.

Wenn in den DCGET OPTIONS eine RESIZE Option angegeben ist (also z.B. AUTORESIZE), hängt Roger noch ein DC_CompleteEvents() rein (aus _DCGETBX.PRG, ungefähr Zeile 760):

Code: Alles auswählen

  IF ::isAutoResize
    ::parentDlg:resize := {|a,b,o,x|x := SetAppFocus(), ;
                                    o:drawingArea:hide(), ;
                                    DC_AutoReSize(a,b,o,aGetList), ;
                                    o:drawingArea:show(), ;
                                    SetAppFocus(x), ;
                                    DC_CompleteEvents() }
Dadurch wird das UserEvent gekillt, weshalb mein Vorschlag mit POSTEVENT nicht funktioniert.

Gleichzeitig ist es so, dass eine DCSTATUSBAR nachträglich eingefügt wird. Selbst DCREAD FIT bewirkt nicht, dass die Folgezeilen ordnungsgemäß positioniert werden. Du musst also bei der Positionierung darauf achten, die Höhe der Statusbar einzurechnen. Das gilt natürlich auch für SetPos().
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Static im Mainfenster

Beitrag von Manfred »

Hm,

dann werde ich mal probieren müssen. Ich meine zwar, das hätte ich schon gemacht, aber sicher bin ich mir jetzt nicht. Naja, dann fange ich mal an, mal sehen was daraus wird.
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!!
Antworten