Zugriff auf Statusbar des Haupt-Anwendungsfensters
Moderator: Moderatoren
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Zugriff auf Statusbar des Haupt-Anwendungsfensters
Servus,
auch mich hat es erwischt, nach 22 Jahren Clipper-Programmierung nun doch auf Xbase++ umzusteigen. Bin gerade am Programmieren meines ersten Programmes mit Xbase++, selbstverständlich in reinem GUI.
Anfängerfrage: Habe brav mein Anwendungsfenster in AppSys definiert inkl. Statusbar.
Jetzt möchte ich in versch. Funktionen, die z. B. von main oder von Funktionen, die über das Menü im Anwendungsfenster mittels Codeblöcke aufgerufen werden, die Statusbar:caption des Anwendungsfensters ändern.
Wie löst man sowas elegant?
Danke,
Werner
auch mich hat es erwischt, nach 22 Jahren Clipper-Programmierung nun doch auf Xbase++ umzusteigen. Bin gerade am Programmieren meines ersten Programmes mit Xbase++, selbstverständlich in reinem GUI.
Anfängerfrage: Habe brav mein Anwendungsfenster in AppSys definiert inkl. Statusbar.
Jetzt möchte ich in versch. Funktionen, die z. B. von main oder von Funktionen, die über das Menü im Anwendungsfenster mittels Codeblöcke aufgerufen werden, die Statusbar:caption des Anwendungsfensters ändern.
Wie löst man sowas elegant?
Danke,
Werner
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Hi,
in der AppSys speicherst du dein Hauptfenster in der Funktion SetAppWindow()
im gesamten Programm kannst du darauf zugreifen ... z.B. um den Titel zu ändern ...
Alle Methoden und Childs (->childlist) kann man so erreichen.
in der AppSys speicherst du dein Hauptfenster in der Funktion SetAppWindow()
Code: Alles auswählen
SetAppWindow(oDlg) <- speichern
Code: Alles auswählen
SetAppWindow():setTitle("Mein neuer Titel")
Gruß
Hubert
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Morgen,
Danke. Leider aber nicht die Statusbar. Das hatte ich so schon getestet. Ich meine NICHT die Titelzeile des Anwendungsfensters.
Servus,
Werner
Danke. Leider aber nicht die Statusbar. Das hatte ich so schon getestet. Ich meine NICHT die Titelzeile des Anwendungsfensters.
Servus,
Werner
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Was genau ist denn die Statusbar ?
In einem XbpDialog gibt es sowas nicht, außer man baut es ein.
Wenn man es einbaut, gibt es eine Instanzvariable ...
Ich habe meinen Fenstern unten eine SLE für Informationen spendiert und fülle die so.
In einem XbpDialog gibt es sowas nicht, außer man baut es ein.
Wenn man es einbaut, gibt es eine Instanzvariable ...
Ich habe meinen Fenstern unten eine SLE für Informationen spendiert und fülle die so.
Gruß
Hubert
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Habs derweil so gelöst:
und in der Funktion dann:
Geht aber sicher auch eleganter?
Danke.
Werner
Code: Alles auswählen
// Statusbar Hauptfenster
oStatusbar := XbpStatusbar():new(oDlg:drawingArea)
oStatusbar:create(,,{0, 0}, {oDlg:drawingArea:currentsize()[1], 30})
oPanel := oStatusbar:getItem(1)
oPanel:autosize := XBPSTATUSBAR_AUTOSIZE_SPRING
oDlg:cargo := oStatusbar
Code: Alles auswählen
oXbp := SetAppWindow():cargo
oXbp:getItem(1):caption := "neue Meldung"
Danke.
Werner
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Das ist schon sehr gut so gelöst mit :Cargo !Werner_Bayern hat geschrieben:Habs derweil so gelöst:
...
Geht aber sicher auch eleganter?
Wenn du nun weiter mit Objecten unter Xbase++ arbeitest werden sich ähnliche Fragen ergeben.
Ich lösen das ganze mit dem "Summer 93" Prinzip.
Code: Alles auswählen
#xtranslate oStatusbar => Stack\[nDim,1]
...
#xtranslate oEnde => Stack\[nDim,100]
STATIC aStack := {}
STATIC nDim := 0
FUNCTION INIT_STACK()
AADD( Stack, ARRAY( 100 ) )
nDim++
// fill Element
oStatusbar := NIL
...
oEnde := NIL
RETURN nDim
FUNCTION EXIT_STACK(nThread)
LOCAL iMax
ADEL(Stack,nThread)
DO WHILE .T.
iMax := LEN(Stack)
IF iMax = 0
EXIT
ELSEIF Stack[iMax] = NIL
ASIZE(Stack,LEN(Stack) - 1)
ELSE
EXIT
ENDIF
ENDDO
nDim := LEN(Stack)
RETURN nDim
FUNCTION SP_Statbar(xValue)
IF PCOUNT() > 0
oStatusbar := xValue
ENDIF
RETURN oStatusbar
Code: Alles auswählen
PROCEDURE MAIN
...
INIT_STACK()
...
oStatusbar := XbpStatusbar():new(oDlg:drawingArea)
oStatusbar:create(,,{0, 0}, {oDlg:drawingArea:currentsize()[1], 30})
// "speicher" Object in Array
SP_Statbar(oStatusbar)
Code: Alles auswählen
SP_Statbar():getItem(1):caption := "neue Meldung"
Durch nDim ist das ganze auch MDI / Thread fähig und eignet sich durch #xtranslate um Cl*pper SAY / GET Memvar weiter zu verwenden.
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Hi,
solange du die CARGO Variable nicht anderweitig benötigst ist das völlig OK.
Ich nutze nur spezielle iVars für mehrere globale Sachen ...
so als Beispiel in der ErrorSys gebe ich z.B. mehrere Infos über den aktuellen Fall aus.
Statt dort die nötigen Infos zu suchen speichere ich die beim Öffnen eines Falles direkt in die
globalen IVars ...
Die Funktion RootWindow() entspricht SetAppWindow(), ich sezte beide am Anfang gleich,
wobei ich ab und zu das SetAppWindow() wechsle, das RootWindow() NIE !
solange du die CARGO Variable nicht anderweitig benötigst ist das völlig OK.
Ich nutze nur spezielle iVars für mehrere globale Sachen ...
Code: Alles auswählen
*------------------------------------------------------------------------------------------------
* Applikationsvariablen im RootFenster merken -> Immer zugänglich ber RootWindow()
CLASS HBRootDialog FROM XbpDialog
EXPORTED:
VAR lDemoMode
VAR DlgAboutBitmap // Resource-ID fr DlgAboutBitmap (Hintergrund)
VAR DlgAboutBG // Hintergrundfarbe fr AboutDialog ohne Hintergrundbild
VAR DlgAboutOption // Art der BMP Anpassung
VAR ProgName
VAR ProgVersion
VAR ProgVersionMitDatum // wenn .t. wird Version - Freigabedatum angezeigt
VAR ProgFreiDatum
VAR aProgOwner // Lizenzgeber
VAR aProgUser // Lizenznehmer 2 Zeilen
VAR aLizenzText // Lizenztext max 3 Zeilen
VAR NotHideMenuItems // Immer Bearbeiten und Fenster anzeigen
VAR UserInfo // Infos ber angemeldeten User -> Text für ErrorSys !
VAR StandardDrucker // NIL, wenn der Standarddrucker benutzt werden soll,
// sonst genau die Zeichenkette, die zur Druckerauswahl
// benötigt wird.
VAR RunInReadOnlyMode // wenn dies aktiviert ist, mssen alle memowrite etc.
// im Programmverzeichnis unterbleiben
METHOD init
METHOD resize // Standardverhalten von xpp ist, das alle nach links unten
// ausgerichtet wird, das gef„llt mir nicht und ist auch nicht
// Windowsstandard
ENDCLASS
*------------------------------------------------------------------------------------------------
METHOD HBRootDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
* Methode der Superklasse rufen
::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
::ProgName := "MDI-Programmgerst HB_XBASE\MDI"
::ProgVersion := "0.00"
::ProgVersionMitDatum := .t.
::ProgFreiDatum := "tt.mm.jjjj"
::aProgOwner := {} // Lizenzgeber 2 Zeilen
::aProgUser := {} // Lizenznehmer 2 Zeilen
::aLizenzText := {} // Lizenztext max 3 Zeilen
::NotHideMenuItems := .f. // Immer Bearbeiten und Fenster anzeigen
::lDemoMode := .f. // .t. bei DEMO Programmen beachte auch Compilerschalter
::StandardDrucker := NIL // NIL, wenn der Standarddrucker benutzt werden soll,
// sonst genau die Zeichenkette, die zur Druckerauswahl
// ben”tigt wird. Im Hauptprogramm aus INI setzten, falls
// gewnscht.
::icon := ICON_APPLICATION // muss in ARC definiert sein !
::DlgAboutBitmap := 0 // Standard ist KEINE Bitmap
::DlgAboutBG := XBPSYSCLR_DIALOGBACKGROUND // Standard ist Dialog Hintergrund
::DlgAboutOption := XBP_IMAGE_NORMAL // Standard ist keine Anpassung
RETURN self
*-----------------------------------------------------------------------------
METHOD HBRootDialog:resize ( aOldSize, aNewSize )
local nMoveOnY
nMoveOnY := aOldSize[2] - aNewSize[2] // Unterschied ermitteln
aeval(::drawingArea:childList(),{|oXbp| oXbp:setPos( ;
{ oXbp:currentPos()[1],;
oXbp:currentPos()[2] - nMoveOnY }, .f. ) } )
// Position ändern, aber nicht anzeigen
::drawingArea:invalidateRect() // nun neue Anzeige erzwingen
RETURN self
Statt dort die nötigen Infos zu suchen speichere ich die beim Öffnen eines Falles direkt in die
globalen IVars ...
Die Funktion RootWindow() entspricht SetAppWindow(), ich sezte beide am Anfang gleich,
wobei ich ab und zu das SetAppWindow() wechsle, das RootWindow() NIE !
Gruß
Hubert
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Zugriff auf Statusbar des Haupt-Anwendungsfensters
Danke Jimmy, danke Hubert!
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>