Statusbar native pure Xbase++

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12411
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Statusbar native pure Xbase++

Beitrag von AUGE_OHR » Mi, 29. Jul 2020 1:18

hi,

ich habe eine CLASS Statusbar mit Ot4xb geschrieben.
den Source gibt es bei Pablo unter www.xbwin.com -> xfree.public

nun gibt es keine Events beim Statusbar nur "click" also "sollte" man es mit "pure" Xbase++ machen können

Code: Alles auswählen

INLINE METHOD CreateTheStatusBar()
   ::hStatusBar := DllCall( "user32.dll","CreateWindowExA",;
                                0			,; // extended styles
				"msctls_statusbar32"	,; // control 'class' name
				""			,; // control caption
				bOr(WS_CHILD,WS_VISIBLE),; // wnd Style
				0,0,0,0			,; // left,top,width,height
			        ::SetParent():GetHWND() ,; // parent window handle
			        -1			,; // control's ID
			        GetModuleHandleA(0)	,; // instance
			        0			 ) // user defined info
   DllCall( "user32.dll","SendMessageA",::hStatusBar,SB_SETMINHEIGHT,20,0)
   DllCall( "user32.dll","SendMessageA",::hStatusBar,SB_SETPARTS,2,{180,-1})
return NIL
die Höhe des Statusbar wird mit SB_SETMINHEIGHT angegeben.
SB_SETPARTS gibt die Anzahl der Items an.
{180,-1} Länge Item 0 = 180, Item 1 = -1 = Rest

Code: Alles auswählen

INLINE METHOD SetPanelText(cText, nItem)
DEFAULT nItem TO 0  // Zero-based
   IF !EMPTY(::hStatusBar)
      DllCall( "user32.dll","SendMessageA",::hStatusBar,SB_SETTEXT,nItem,cText )
   ENDIF
return NIL
so setzt man einen Text

damit hat man einen rudimentären Statusbar OHNE MsComCtl.OCX

---

ich habe nun nicht den gesamten Source von DXE_SBAR genommen weil ich paar ot4xb Sachen verwende wo ich nicht weiss wie man es mit "pure" Xbase++ machen kann. schaut euch den ot4xb Source an was man noch so für "pure" Xbase++ gebrauchen kann ( Timer Uhr, Keyboard Einstellungen )

hier noch die Konstanten

Code: Alles auswählen

#define WS_CHILD                0x40000000
#define WS_VISIBLE              0x10000000
#define WM_USER 		0x0400

#define SB_SETTEXT      	(WM_USER+1)
#define SB_SETPARTS             (WM_USER+4)
#define SB_SETMINHEIGHT         (WM_USER+8)
gruss by OHR
Jimmy

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12411
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Statusbar native pure Xbase++

Beitrag von AUGE_OHR » Mi, 29. Jul 2020 8:37

hi,

es gab doch einen Grund warum ich bislang keine "pure" Xbase++ native Version hatte ... #-o

Code: Alles auswählen

   DllCall( "user32.dll",DLL_STDCALL,"SendMessageA",::hStatusBar,SB_SETPARTS,2,{180,-1})
das geht nicht per Xbase++ DllCall mit einem Array als Parameter.

Code: Alles auswählen

   DllCall( "user32.dll",DLL_STDCALL,"SendMessageA",::hStatusBar,SB_SETPARTS,2)
das geht aber ich bekomme nur 1 x Item (weil der 3rd. Array Parameter fehlt)

aber es ging ja nur um einen rudimentären Statusbar und hier ist die CLASS als Demo in "pure" Xbase++ (ohne ot4xb)
XBSBAR.ZIP
(2.88 KiB) 11-mal heruntergeladen
---

ich habe zwar ein o:resize eingebaut, was funktioniert, aber es macht was komisches wenn ich von Maximize auf Normalize gehe :
Statusbar erscheint erst wenn die Maus "im" Fenster ist :shock:

wenn Alaska ein Einsatz von Array als Parameter bei DllCall() realisiert kann man die CLASS weiter ausbauen.
gruss by OHR
Jimmy

Antworten