Fonte/ Codesnippets | | | | - Page 1 - |
| | SubClassProc Timer - sichere KompilierenMarkierenSeparieren $H windows.ph
WINDOWSTYLE 80 | 512 | 1024
WINDOW %MAXX,%MAXY - 0,0
SHOWWINDOW(%HWND,0)
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
var HMYWND&=(CREATE("WINDOW",(0),"Zuckertest 3.0",(100),(100),(200),(350)))
var HPIC&=CREATE("hNewPic",64,64,$FFFFAA)
var HDSK&=CREATE("text",HMYWND&,"",0,0,$FFFF,$FFFF)
var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Bereit.")
USERMESSAGES $0010,$0014
MYWND.RESIZING()
SUBCLASS HMYWND&,1
~SetClassLongA(HMYWND&,-12,~LoadCursorA(0,32512))
~SetTimer(HMYWND&,55100,100,0)
~SetTimer(HMYWND&,55101,500,0)
WHILE 1
WAITINPUT
SELECT %UMESSAGE
CASEOF $0010
SELECT %MWND
CASEOF HMYWND&
BREAK
ENDSELECT
ENDSELECT
ENDWHILE
~KillTimer(HMYWND&,55100)
~KillTimer(HMYWND&,55101)
end
SUBCLASSPROC
SELECT &SWND
CASEOF HMYWND&
SELECT %SMESSAGE
CASEOF 532,$0005
MYWND.RESIZING()
CASEOF $0113
SELECT &SWPARAM
CASEOF 55100
DEMO(1)
CASEOF 55101
DEMO(2)
ENDSELECT
ENDSELECT
ENDSELECT
endproc
proc MYWND.RESIZING
SETWINDOWPOS HSTATBAR&=0,0 - 0,0
DEMO(1)
DEMO(2)
endproc
proc DEMO
PARAMETERS MODE&
SELECT MODE&
CASEOF 1
STARTPAINT HMYWND&
USEPEN 0,0,RND($FFFFFF)
LINE 10,10 - 200,43
ENDPAINT
CASEOF 2
STARTPAINT HMYWND&
TEXTCOLOR RND($FFFFFF),~GetSysColor(15)
DRAWTEXT 10,10,&GETTICKCOUNT
ENDPAINT
ENDSELECT
endproc
KompilierenMarkierenSeparieren {$cleq}
windowstyle 80 | 512 | 1024
window maxx,maxy - 0,0
showWindow(hWnd,false)
windowstyle 1 | 2 | 4 | 8 | 16 | 512
long hMyWnd=createWindow(,"Zuckertest 3.0",100,100,200,350),
hPic=create("hNewPic",64,64,$FFFFAA),
hDsk=create("text",hMyWnd,"",,,$FFFF,$FFFF),
hStatBar=create("statusWindow",hmyWnd,"Bereit.")
userMessages wm_close,wm_erasebkgnd
myWnd.resizing()
setClassLong(hMyWnd,gcl_hcursor,loadCursor(,IDC_ARROW))
subClass hMyWnd,true
~setTimer(hMyWnd,55100,100,)
~setTimer(hMyWnd,55101,500,)
do {
waitInput
select uMessage
caseof wm_close
select mWnd
caseof hMyWnd
break
endSelect
endSelect
}
~killTimer(hMyWnd,55100)
~killTimer(hMyWnd,55101)
end
subClassProc {
select sWnd
caseof hMyWnd
select sMessage
caseof wm_sizing,wm_size
myWnd.resizing()
caseof wm_timer
select sWParam
caseof 55100:demo(1)
caseof 55101:demo(2)
endSelect
endSelect
endSelect
}
myWnd.resizing{
setWindowPos hStatBar=0,0 - 0,0
demo(1)
demo(2)
}
demo(long mode){
select mode
caseof 1
startPaint hMyWnd
usePen 0,,rnd($FFFFFF)
line 10,10 - 200,43
endPaint
caseof 2
startPaint hMyWnd
textColor rnd($FFFFFF),getSysColor(15)
drawText 10,10,getTickCount
endPaint
endSelect
}
|
| | | | |
| | | | | - Page 1 - |
| | Nö, ist völlig korrekt mit XPSE.
Fenster soll auf 0 erstellt werden (oberste Ebene) damit es auch sicher in der Tastkbar landet - und der Parameter zwischen ,, kann nur 0 sein. Das klappt aber nur hinter Klammern und zwischen Kommas...
XPSE übersetzt es doch auch korrekt, oder?
Du kannst mit XPSE schreiben: KompilierenMarkierenSeparieren und die ausgekommaten 4 Parameter sind halt 0... (sichert aber auch nur, das - wenn in der Zielfunktion keine pCount-Prüfung eingebaut ist - die übergebenen Parameter auch wirklich 0 sind) |
| | | | |
| | | Frank Abbing
Was genau soll der Code demonstrieren?
Damit kann man sicheres threadähnliches Verhalten Programmieren, bzw. ist es hierfür eine Vereinfachung.
Blockierende Apis können damit naturalmente nicht überrumpelt werden. |
| | | | |
| | Jörg Sellmeyer | Wenn Io l' zweien Code als prf-File per Drag & Drop auf XPSE ziehe erhalte ich diesen Code: KompilierenMarkierenSeparieren
proc __xpse__endofprogram__
REM {{SOMEEXTRAENDCOMMAND}}
end
endproc
DECLARE __cf1&,__cf2&,__cf3&,__cf4&,__cf5&
Def __cf1(2) !"KERNEL32","GetProcAddress"
Def __cf2(1) !"KERNEL32","GetModuleHandleA"
__cf1&=__cf1(__cf2("user32.dll"),"SetClassLongA")
__cf2&=__cf1(__cf2("user32.dll"),"LoadCursorA")
__cf3&=__cf1(__cf2("user32.dll"),"SetTimer")
__cf4&=__cf1(__cf2("user32.dll"),"KillTimer")
__cf5&=__cf1(__cf2("user32.dll"),"GetSysColor")
WINDOWSTYLE 80 | 512 | 1024
WINDOW %MAXX,%MAXY - 0,0
SHOWWINDOW(%HWND,0)
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
var HMYWND&=(CREATE("WINDOW",(),"Zuckertest 3.0",(100),(100),(200),(350)))
!!!!!
var HPIC&=CREATE("hNewPic",64,64,$FFFFAA)
var HDSK&=CREATE("text",HMYWND&,"",,,$FFFF,$FFFF)
!!!!!
var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Bereit.")
USERMESSAGES $0010,$0014
MYWND.RESIZING()
call(__cf1&,HMYWND&,-12,call(__cf2&,,32512))
SUBCLASS HMYWND&,1
call(__cf3&,HMYWND&,55100,100,)
call(__cf3&,HMYWND&,55101,500,)
WHILE 1
WAITINPUT
SELECT %UMESSAGE
CASEOF $0010
SELECT %MWND
CASEOF HMYWND&
BREAK
ENDSELECT
ENDSELECT
ENDWHILE
call(__cf4&,HMYWND&,55100)
call(__cf4&,HMYWND&,55101)
__xpse__endofprogram__
proc SUBCLASSPROC
SELECT SWND
CASEOF HMYWND&
SELECT SMESSAGE
CASEOF 532,$0005
MYWND.RESIZING()
CASEOF $0113
SELECT SWPARAM
CASEOF 55100
DEMO(1)
CASEOF 55101
DEMO(2)
ENDSELECT
ENDSELECT
ENDSELECT
endproc
proc MYWND.RESIZING
SETWINDOWPOS HSTATBAR&=0,0 - 0,0
DEMO(1)
DEMO(2)
endproc
proc DEMO
PARAMETERS MODE&
SELECT MODE&
CASEOF 1
STARTPAINT HMYWND&
USEPEN 0,,RND($FFFFFF)
!!!!!
LINE 10,10 - 200,43
ENDPAINT
CASEOF 2
STARTPAINT HMYWND&
TEXTCOLOR RND($FFFFFF),call(__cf5&,15)
DRAWTEXT 10,10,&GETTICKCOUNT
ENDPAINT
ENDSELECT
endproc
__xpse__endofprogram__
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 31.08.2008 ▲ |
| |
| | | Ähä, der neuste XPSE (aber hierbei auch schon ein XPSE der deutlich älter sein kann) gibt aber folgenden Code KompilierenMarkierenSeparieren
proc __xpse__endofprogram__
PARAMETERS exitcode&
REM {{SOMEEXTRAENDCOMMAND}}
case %pcount=1 : end exitcode&
end
endproc
DECLARE __cf1&,__cf2&,__cf3&,__cf4&,__cf5&
Def __cf1(2) !"KERNEL32","GetProcAddress"
Def __cf2(1) !"KERNEL32","GetModuleHandleA"
__cf1&=__cf1(__cf2("user32.dll"),"SetClassLongA")
__cf2&=__cf1(__cf2("user32.dll"),"LoadCursorA")
__cf3&=__cf1(__cf2("user32.dll"),"SetTimer")
__cf4&=__cf1(__cf2("user32.dll"),"KillTimer")
__cf5&=__cf1(__cf2("user32.dll"),"GetSysColor")
WINDOWSTYLE 80 | 512 | 1024
WINDOW %MAXX,%MAXY - 0,0
SHOWWINDOW(%HWND,0)
WINDOWSTYLE 1 | 2 | 4 | 8 | 16 | 512
!!!!!
var HMYWND&=(CREATE("WINDOW",(0),"Zuckertest 3.0",(100),(100),(200),(350)))
var HPIC&=CREATE("hNewPic",64,64,$FFFFAA)
var HDSK&=CREATE("text",HMYWND&,"",0,0,$FFFF,$FFFF)
!!!!!
var HSTATBAR&=CREATE("statusWindow",HMYWND&,"Bereit.")
USERMESSAGES $0010,$0014
MYWND.RESIZING(an class=s2>)
...
Im Moment tippe ich noch darauf das Du vlt. einen doch schon in die Monate gekommenen XPSE benutzt!?? |
| | | | |
| | | | - Page 2 - |
| | Jörg Sellmeyer | Im Moment bekomme ich das zu sehen, wenn ich XPSE starte:
Gestern runtergeladen.
[offtopic]Das Feature mit dem Dateibrowser, wenn ich in das Feld "Datei an Beitrag anhängen" klicke, ist ja ganz nett. Jetzt kann ich aber nix mehr per Tasttatur oder Strg + V eingeben. [/offtopic] |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 31.08.2008 ▲ |
| |
| | | Der Dialog ist auch normal - kommt bei jeder (zunächst fremden) File wenn das Windows-Dateisystem die File nicht als "eigene" erkennt - hat mit xpse selbst aber nichts zu tun. Die XPSE-Version bekommst Du heraus wenn Du XPSE einfach mal mit Programm, oder im CMD startest.
[offtopic] Jörg SellmeyerDas Feature mit dem Dateibrowser, wenn ich in das Feld "Datei an Beitrag anhängen" klicke, ist ja ganz nett. Jetzt kann ich aber nix mehr per Tasttatur oder Strg + V eingeben. Das ist keine meiner Erfindungen sondern eine des FireFox - da habe ich keinen Einfluss drauf. FireFox "tut jetzt so" um es Angriffen - wie z.B. unerwünschtes Hochladen durch "scripts" - schwieriger zu machen. Ich find auch schade das damit z.B. ein Strg+V nur noch geht circa "Durchsuchen" -> Strg+V -> {enter} [/offtopic] |
| | | | |
| | Jörg Sellmeyer | Wenn XProfan das hier kennt: var HMYWND&=(CREATE("WINDOW",(0),"Zuckertest 3.0",(100),(100),(200),(350))) ,dann ist das auf jeden Fall an mir vorbeigegangen. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 31.08.2008 ▲ |
| |
| | | NULL als Parent-Handle hat imho nichts mit XProfan zu tun, und naturalmente weiss Windows genau was ich damit meine und reagiert auch korrekt indem es das Fenster auf 0 (root) erstellt. Was Spricht gegen NULL als Fensterparent? |
| | | | |
| | Jörg Sellmeyer | Ah, wenn das so ist. Meine XPSE-Version war tatsächlich etwas veraltet. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 31.08.2008 ▲ |
| |
| | | Besonders bei XPSE kann ich nur immer wieder anmerken das wirklich kein Update übergangen werden sollte... |
| | | | |
| | Stefan M. Caillet | Hallo iF, wenn du das jetzt auch noch so hinbekommst, dass es auch ausserhalb des waitinputs corre, hast du den Ersatz per die MSX-Interval Inc. Gruss Stefan |
| | | Ich habe grosses Glück, weil ich Mitmenschen helfen darf. Entwicklungsumgebung: XProfan11 , Win XP Pro 32Bit , Win XP Home ,Win7 HomePremium 64Bit PC: P4/3GHz , 2GB RAM , 1700GB HD Laptop: Intel Core 2 Duo /2,2GHz , 4GB RAM , 500GB HD | 13.11.2008 ▲ |
| |
| | | Schau mal, noch einfacher als die msx-interval.inc ist die thread-unit [...] , beide setzen auf die settimer-api auf.
Im Unterschied nur zur msx-interval.inc ist die thread-unit bestückt mit etwas Sicherheit und Bedienungsanleitung verteilt circa Threads, aber auch diese beiden Dinge können die Absturzgefahr nur vermindern.
ProcAddr ist momentan per Enumerationsapis vorgesehen. Es per setTimer zu verwenden, und auch noch ausserhalb des Waitinput, kann immer crashen, solange XProfan das (noch) nicht explizit handhaben kann.
Schau, selbst Rolands Implementation des SubClassings funktioniert nur im WaitInput.
Irgendwann wird Roland da ran müssen. |
| | | | |
|
Zum QuelltextTopic-Options | 11.351 Views |
ThemeninformationenDieses Thema hat 5 subscriber: |