Deutsch
Quelltexte/ Codesnippets

Alternatives Edit Hex Spinedit

 

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:
KompilierenMarkierenSeparieren
Declare 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!
 
04.11.2007  
 




GDL
Hi,

werde ich gleich mal testen.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
04.11.2007  
 




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:
KompilierenMarkierenSeparieren
window 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
 
05.11.2007  
 




Jörg
Sellmeyer
Naja, zumindest so ähnlich kann man diesen Effekt auch auf das Profancontrol anwenden:
KompilierenMarkierenSeparieren
window 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.
 
05.11.2007  
 




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:
KompilierenMarkierenSeparieren
Declare 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 X2
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
28.06.2015  
 




Michael
W.
Klasse.

Was mir beim Testen auffiel:
Im Interpreter funktioniert das (c)-Menü, aber kompiliert funktioniert es nicht.
 
XProfan X3
System: 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 Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

16.669 Betrachtungen

Unbenanntvor 0 min.
Rainer Hoefs22.04.2023
p.specht20.11.2021
Uwe Lang20.11.2021
Manfred Barei19.11.2021
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie