Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Controls: Edit, MultiEdit und Listboxen mit 3D-Rand
PRFellow-Vorlage
Autor: Thomas Hölzer
Edit-Controls lassen bei Profan32 vor 6.1 den typischen
3D-Look vermissen; Listboxen auch noch bei 6.5.
Diese Beispiele schaffen Abhilfe
Def SetWindowLong(3) !USER32, SetWindowLongA
Def GetModuleHandle(1) !KERNEL32,GetModuleHandleA
Def InvalidateRect(3) !USER32,InvalidateRect
Proc Create3DEdit
Parameters hwnd%,txt$,x%,y%,x1%,y1%,id%
Declare hedit&
Let hedit&=Control(Edit,txt$,$54010000,0,0,0,0,hwnd%,id%,GetModuleHandle(0))
SetWindowLong(Hedit&,-20,$200)
SetWindowPos Hedit&=x%,y%-x1%,y1%
Return hedit&
EndProc
Proc Create3DMultiEdit
Parameters hwnd%,txt$,x%,y%,x1%,y1%,id%
Declare hedit&
Let hedit&=Control(Edit,txt$,$54010044,0,0,0,0,hwnd%,id%,GetModuleHandle(0))
SetWindowLong(Hedit&,-20,$200)
SetWindowPos Hedit& = x%,y%-x1%,y1%
Return hedit&
EndProc
Proc Create3DListBox
Parameters hwnd%,x%,y%,x1%,y1%,border%
Declare h&,xstyle%,hedit&
Let xstyle%=$200
Case border%:Let xstyle%=1
Let h&=CreateListBox(hwnd%,,x%,y%,x1%,y1%)
SetWindowLong(h&,-20,xstyle%)
InvalidateRect(h&,0,1)
SetWindowPos h&=x%,y%-x1%,y1%
Return hedit&
EndProc
Beispiel
Declare multiedit1&
SetTrueColor 1
WindowTitle Edits und Listboxen, die mit wenig Aufwand so aussehen, wie man es erwartet...
Window 80,60-640,480
Cls 12632256
Create3DEdit %hwnd,Edit mit 3D-Rand,10,10,200,24,2000
Create3DMultiEdit %hwnd,,250,10,350,350,2001
Let multiedit1&=@&(0)
Create3DListbox %hwnd,10,50,200,100,0
AddString(@&(0),Listbox Stil 0 - typisch)
Create3DListbox %hwnd,10,200,200,100,1
AddString(@&(0),Stil 1 (untypisch))
SetText MultiEdit1&, Das Handle befindet sich nach dem Aufruf der Prozeduren
jeweils in @&(0) - ein Longint sollte als Handle sicherheitshalber sein.
While 1
Wend