Xojo Conferences
XDCMay2019MiamiUSA

Win32 StatusBar2 (plain txt-2.Versuch) (Real Studio network user group Deutschland Mailinglist archive)

Back to the thread list
Previous thread: Ampel [von Norbert Krämer]
Next thread: AIM Quellcode


Re: 5.2.1de ist da   -  
  Win32 StatusBar2 (plain txt-2.Versuch)   -   Susann Roth / Andreas Hänsch <

Win32 StatusBar2 (plain txt-2.Versuch)
Date: 16.12.03 22:35 (Tue, 16 Dec 2003 22:35:48 +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 <-

- - - - - - - - - -
For list commands, send "Help" in the body of a message to
<<email address removed>>