Xojo Developer Conference
25/27th April 2018 in Denver.
MBS Xojo Conference
6/7th September 2018 in Munich, Germany.

Win32 StatusBar (Real Studio network user group Deutschland Mailinglist archive)

Back to the thread list
Previous thread: AIM Quellcode
Next thread: Icon im CommandButton


Re: 5.2.1de ist da   -  
  Win32 StatusBar   -   Susann Roth / Andreas Hänsch <

Win32 StatusBar
Date: 15.12.03 23:38 (Mon, 15 Dec 2003 23:38:45 +0100)
From: Susann Roth / Andreas Hänsch <
Hallo,

nach einigem Probieren und Studieren habe ich jetzt doch endlich eine voll funktionsfähige Windows-StatusBar hingekriegt. Das einzige, was jetzt noch fehlt, sind Benutzeranpassungen, also z. B. mehrere Abschnitte mit bestimmtem Text definieren. Grundlage dafür ist die API-Message SB_SETPARTS. Mein Problem ist der richtige Umgang mit der MemoryBlock-Funktion, um für lParam (siehe unten) den Pointer auf ein Integer-Array zu erzeugen. Da sonst alles ganz gut läuft, schicke ich einfach mal mein letzten Versuch für das Open-Event von Window1 (das Resize-Event läuft einwandfrei).
Ich hoffe, Ihr könnt mir helfen, um dieses lParam richtig zu definieren.
Andreas

Vorher noch eine Erklärung für SB_SETPARTS aus einem VB-Quelltext:
********************************************************************
'The SB_SETPARTS message sets the number of parts in a status
'window and the coordinate of the right edge of each part.
'wParam = Number of parts to set. The number of parts cannot be
' greater than 255.
'lParam = Pointer to an integer array that has the same number
' of elements as parts specified by nParts. Each element
' in the array specifies the position, in client
' coordinates, of the right edge of the corresponding part.
' If an element is - 1, the position of the right edge for
' that part extends to the right edge of the window.
'Rtns True on success, False if failure
********************************************

-------------------------------------------------------
mein Code in window1's open event (aufpassen wegen Zeilenumbruch!):
-> start code <-
sub Open()
Const WM_SETFONT = 48
Const DEFAULT_GUI_FONT = 17
Const SB_SETPARTS = 1028 'WM_USER+4=1024+4
Const SW_NORMAL = 1

Dim sbStyle, i, mWnd, SystemFont as Integer
Dim sbText as String
Dim lParam as MemoryBlock

#if TargetWin32 then
Declare Function CreateStatusWindow Lib "comctl32" (ByVal dwStyle as Integer, ByVal Text as CString, ByVal hWndParent as Integer, ByVal wID as Integer) as Integer
Declare Function ShowWindow Lib "user32" (ByVal hwnd as Integer, ByVal nCmdShow as Integer) as Integer
Declare Function SendMessageA Lib "user32" (ByVal hwnd as Integer, ByVal msg as Integer, ByVal wParam as Integer, ByVal lParam as Ptr) as Integer
Declare Function GetStockObject Lib "gdi32" (ByVal fnObject as Integer) as Integer

sbText = "Hello World!"
sbStyle = 1342177536 ' WS_CHILD or WS_VISBLE or SBARS_SIZEGRIP
lParam = NewMemoryBlock(8) '1 Parts * 4?

'create StatusBar
sHnd = CreateStatusWindow(sbStyle, sbText, me.WinHWND, 0)
'get the handle of the system font
SystemFont = GetStockObject(DEFAULT_GUI_FONT)
'ensure that system font will be used
i = SendMessageA(mWnd, WM_SETFONT, SystemFont, lParam)
'set parts of the statusbar
lParam.Long(0) = 2 'length of struct
lParam.Long(1) = 100
i = SendMessageA(mWnd, SB_SETPARTS, 2, lParam)
'activate and display StatusBar
i = ShowWindow(mWnd, SW_NORMAL)
#endif
End Sub
-> end code <-