Quelltexte/ Codesnippets | | | | Frank Abbing | Das profane SpinEdit-Control - ich sags mal in aller Ehrlichkeit - sieht hässlich aus mit seiner Unterbrechung zwischen Edit und Pfeilen. Meiner Meinung nach ist das sogar ein Bug... Es gibt aber eine automatisierte und einfach zu programmierende Alternative - das UpDown-Control. Wahlweise als Dezimal- oder Hexadezimal-Edit (leider nur C-Style). Hier ein Testcode: KompilierenMarkierenSeparierenDeclare xdec&, xhex&, font&
Def GetSysColor(1) !USER32,GetSysColor
Cls GetSysColor(15)
font& = Create(Font,MS Sans Serif,10,0,0,0,0)
SetDialogFont font&
Dezimal-Edit
Create(EDIT,%HWnd,,8,8,64,20)
xdec&=Control(MSCTLS_UPDOWN32, ,$54000192,72,8,16,20, %hwnd, 2019, %hInstance, $00000000)
SendMessage(xdec&,$467,0,60) 60 = Ausgangszahl
SendMessage(xdec&,$46f,40,1440) 40 bis 1440 = Mini-und Maximalwert
Hexadezimal-Edit
Create(EDIT,%HWnd,,8,32,64,20)
xhex&=Control(MSCTLS_UPDOWN32, ,$54000192,72,32,16,20, %hwnd, 2019, %hInstance, $00000000)
SendMessage(xhex&,$46d,16,0) 10 = Dezimal / 16 = Hexadezimal
SendMessage(xhex&,$467,0,60) 60 = Ausgangszahl
SendMessage(xhex&,$46f,40,1440) 40 bis 1440 = Mini-und Maximalwert
While 1
WaitInput
Case %key=2:Break
EndWhile
End
Gibt noch einige Messages mehr. Z.B. kann bestimmt werden, das sich das Edit der Position und Grösse des UpDown-Controls automatisch anpasst (links und rechsbündig). Auch ist es möglich, das die Werte von vorne beginnen zu zählen, sobald ein Überlauf stattgefunden hat. Auch Tausender-Markierungen sind leicht einzustellen. Natürlich kann dem Control auch jedes x-beliebige Edit zugewiesen werden. Voreingestellt ist (wie in meinem Beispiel) das davor zuletzt generierte Edit-Control.
Viel Spass beim experimentieren! |
| | | | |
| | GDL | Hi,
werde ich gleich mal testen.
Servus Georg |
| | | | |
| | Jörg Sellmeyer | Sowas kann man auch noch machen: KompilierenMarkierenSeparieren $H windows.ph
$H messages.ph
Declare xdec&, xhex&, font&
Cls ~GetSysColor(15)
SetDialogFont ~GetStockObject($11)
Dezimal-Edit
Create(EDIT,%HWnd,,8,8,64,20)
xdec&=Control(MSCTLS_UPDOWN32, ,$54000192,72,8,16,20, %hwnd, 2019, %hInstance, $00000000)
SendMessage(xdec&,$467,0,60)60 = Ausgangszahl
SendMessage(xdec&,$46f,40,1440)40 bis 1440 = Mini-und Maximalwert
Hexadezimal-Edit
Create(EDIT,%HWnd,,8,32,64,20)
xhex&=Control(MSCTLS_UPDOWN32, ,$54000192,72,32,16,20, %hwnd, 2019, %hInstance, $00000000)
SendMessage(xhex&,$46d,16,0)10 = Dezimal / 16 = Hexadezimal
SendMessage(xhex&,$467,0,60)60 = Ausgangszahl
SendMessage(xhex&,$46f,40,1440)40 bis 1440 = Mini-und Maximalwert
Var l& = Create(Listbox,%hwnd,,8,56,80,19)
SetStyle l&,1,GetStyle(l&,1) | ~ws_ex_right
WhileLoop -9,9
AddString(l&,Wert: + Str$(&Loop))
Wend
While 1
WaitInput
Case %key=2:Break
EndWhile
End
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 04.11.2007 ▲ |
| |
| | Uwe ''Pascal'' Niemeier | Hallo Leute!
Hoch ne Variante: KompilierenMarkierenSeparierenwindow 100,100-300,300
$H Messages.ph
$H commctrl.ph
create(text,%hwnd,,50,50,50,20)
var UD&=~CreateUpDownControl($54000192,0,0,0,0,%hwnd,1,0,0,10000,-10000,50)
setwindowpos UD&=50,100-50,50
declare a#
dim a#,24
long a#,0=0---zu Beginn 1er zählen
long a#,4=1
long a#,8=2---nach 2 Sekunden 10er zählen
long a#,12=10
long a#,16=4--nach 4 Sekunden 100er zählen
long a#,20=100
sendmessage(UD&,~UDM_SETACCEL,3,a#)
while 1
waitinput
endwhile
Das ist der Nachteil der ständigen Vereinfachungen bei Profan: Solche Feinheiten geraten schnell in Vergessenheit, und dann wird nach weiteren Vereifachungen geschrien...
SeeYou Pascal |
| | | | |
| | Jörg Sellmeyer | Naja, zumindest so ähnlich kann man diesen Effekt auch auf das Profancontrol anwenden: KompilierenMarkierenSeparierenwindow 100,100-300,300
Def UDM_GetBuddy(1) SendMessage(&(1),$046A,0,0)
$H Messages.ph
$H commctrl.ph
create(text,%hwnd,,50,50,50,20)
Var UD& = Create(SpinEdit,%hwnd,0;-10000;10000,10,80,100,20)
VAR UDBud& = UDM_GetBuddy(UD&)
declare a#
dim a#,24
long a#,0=0---zu Beginn 1er zählen
long a#,4=1
long a#,8=2---nach 2 Sekunden 10er zählen
long a#,12=10
long a#,16=4--nach 4 Sekunden 100er zählen
long a#,20=100
sendmessage(UDBud&,~UDM_SETACCEL,3,a#)
while 1
waitinput
endwhile
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 05.11.2007 ▲ |
| |
| | Frank Abbing | @Pascal: Die Message lässt sich natürlich auch auf mein obiges UpDown-Control anwenden. Im Übrigen benutzt Rolands Spinedit eben diese API. |
| | | | |
| | RGH | Auch wenn dieser Thread schon 7,5 Jahre (!) alt ist: Ich habe in X3 die inzwischen von Microsoft als "veraltet" gekennzeichnete API "createUpDownControl" durch die aktuelle Variante mit "createwindow(MSCTLS_UPDOWN32" ersetzt. Das sieht nicht nur etwas besser aus, sondern erlaubt auch Werte, die über den 16-Bit-Bereich hinausgehen: KompilierenMarkierenSeparierenDeclare xdec&, xhex&, font&, hspin&
Def GetSysColor(1) !"USER32.DLL","GetSysColor"
Cls GetSysColor(15)
font& = Create("Font","MS Sans Serif",10,0,0,0,0)
SetDialogFont font&
' Dezimal-Edit
Create("EDIT",%HWnd,"",8,8,64,20)
xdec&=Control("MSCTLS_UPDOWN32", "",$54000192,72,8,16,20, %hwnd, 2019, %hInstance, $00000000)
SendMessage(xdec&,$467,0,60)' 60 = Ausgangszahl
SendMessage(xdec&,$46f,40,1440)' 40 bis 1440 = Mini-und Maximalwert
' Hexadezimal-Edit
Create("EDIT",%HWnd,"",8,32,64,20)
xhex&=Control("MSCTLS_UPDOWN32", "",$54000192,72,32,16,20, %hwnd, 2019, %hInstance, $00000000)
SendMessage(xhex&,$46d,16,0)' 10 = Dezimal / 16 = Hexadezimal
SendMessage(xhex&,$467,0,60)' 60 = Ausgangszahl
SendMessage(xhex&,$46f,40,1440)' 40 bis 1440 = Mini-und Maximalwert
' Profan
hSpin& = Create("SpinEdit", %hWnd, "60; -100; 100", 8, 56, 80, 20)
While 1
WaitInput
Case %key=2:Break
EndWhile
End
|
| | | XProfan X2Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 28.06.2015 ▲ |
| |
| | Michael W. | Klasse.
Was mir beim Testen auffiel: Im Interpreter funktioniert das (c)-Menü, aber kompiliert funktioniert es nicht. |
| | | XProfan X3System: Windows 8/10, XProfan X4 Programmieren, das spannendste Detektivspiel der Welt. | 29.06.2015 ▲ |
| |
| | RGH | Das war schon immer so: Im Interpreter wird die Info-Box zum Interpreter angezeigt und dann %menuitem auf 254 gesetzt. Im fertigen Programm (EXE oder Runtime) wird nur %menuitem auf 254 gesetzt. Wenn der Programmierer im Programm darauf nicht reagiert, passiert eben nichts.
Das war ursprünglich dafür gedacht, dass hier der Programmierer seinen eigenen Copyright-Hinweis setzt. Und im fertigen Programm muss ja nicht unbedingt der Copyright-Hinweis von XProfan drin stehen.
Das steht auch so irgendwo in der Hilfe.
Gruß Roland |
| | | Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 29.06.2015 ▲ |
| |
|
Zum QuelltextThemenoptionen | 16.669 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |