Forum | | | | Jac de Lad | Hallöle,
ich hab mal in der XProfan-Hilfe gestöbert und bin auf eine Möglichkeit gekommen, das Systemmenü eines Programms zu erweitern. Dann habe ich noch was gespostet...dann kam was zurück...jedenfalls habe ich jetzt folgendes Problem:
Wenn ich das einbaue (mit Systemmenü und so) dann reagieren einige Buttons auf Anklicken zweimal. Das liegt an Set(FastMode,1), soviel steht fest. Jetzt meine Frage: Kann man das mit dem Systemmenü so realisieren, dass der Fastmode nicht eingeschaltet werden muss, bzw. wie kann ich das geisterhafte Doppelklicken verhindern?
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 10.11.2005 ▲ |
| |
| | | Hier würde es sehr helfen wenn du ein Minimalbeispiel posten könntest. |
| | | | |
| | Jac de Lad | KompilierenMarkierenSeparieren $H C:ProgrammeXProfan 8.0Includewindows.ph
$H C:ProgrammeXProfan 8.0Includemessages.ph
$H C:ProgrammeXProfan 8.0Includecommctrl.ph
Proc SystemMenu
Parameters hWnd&,Message&,wParam&,lParam&
If Equ(Message&,~WM_SYSCOMMAND)
If Equ(wParam&,5000)
Messagebox("Programm 1.0","Message",64)
endif
EndIf
Return ~CallWindowProc(OldWndProc&,hWnd&,Message&,wParam&,lParam&)
EndProc
declare up&,down&,oldwndproc&,up%,Plugin&[64],PCount%
windowstyle 26
WindowTitle "Testprogramm"
window 100,100-800,632
Set("FastMode",1)
~AppendMenu(~GetSystemMenu(%hWnd,0),~MFT_SEPARATOR,0,0)
~AppendMenu(~GetSystemMenu(%hWnd,0),~MFT_STRING,5000,"Über Programm 1.0")
OldWndProc&=~GetWindowLong(%hWnd,~GWL_WNDPROC)
~SetWindowLong(%hWnd,~GWL_WNDPROC,ProcAddr("SystemMenu",4))
up&=CREATEBUTTON(%HWnd,"/",1,1,194,20)
down&=CREATEBUTTON(%HWnd,Add$(Chr$($5C),Chr$($2F)),1,580,194,20)
whileloop 0,13
Plugin&[&Loop]=Control("Button",Str$(&Loop),Add($40008088,If(LT(PCount%,9),$10000000,0)),2,Add(Mul(62,&Loop),22),194,60,%HWnd,Add(1001,&Loop),%Hinstance)
Inc PCount%
wend
while 1
EnableWindow up&,Neq(up%,0)
EnableWindow down&,GT(Sub(Sub(PCount%,9),up%),0)
waitinput
if GetFocus(up&)
Hochscrollen
ShowWindow(Plugin&[Sub(up%,1)],1)
Dec up%
Whileloop up%,Add(up%,8)
SetWindowPos Plugin&[&Loop]=2,Add(22,Mul(62,Sub(&Loop,up%)))-194,60
wend
ShowWindow(Plugin&[Add(up%,9)],0)
elseif GetFocus(down&)
Runterscrollen
ShowWindow(Plugin&[up%],0)
Whileloop up%,Add(up%,8)
SetWindowPos Plugin&[Add(&Loop,1)]=2,Add(22,Mul(62,Sub(&Loop,up%)))-194,60
wend
ShowWindow(Plugin&[Add(up%,9)],1)
Inc up%
endif
wend
Ich hoffe, du kannst was damit anfangen...nur noch mal die Problemstellung:
Wenn ich Set(FastMode,1) weglasse stirbt das Prog beim hinzufügen des Eintrags Über Programm 1.0. Wenn ich es aber einbringe funzt das, doch das Scrollen über up& und down& klickt immer zweimal.
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 11.11.2005 ▲ |
| |
| | Jac de Lad | Verdammt! Kann mir jemand sagen, wie ich den Quelltext richtig anzeigen lasse? Ich kriegs einfach nicht gebacken!!!
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 11.11.2005 ▲ |
| |
| | | | | | | |
| | | Wehe es behauptet einer es sei Beschiss. KompilierenMarkierenSeparieren {$compiler p8}
{$runtime p8}
$H Windows.ph
$H Messages.ph
$H Commctrl.ph
Proc Systemmenu
Parameters Hwnd&,Message&,Wparam&,Lparam&
If Equ(Message&,~Wm_syscommand)
If Equ(Wparam&,5000)
Messagebox("Programm 1.0","Message",64)
Endif
Endif
Return ~Callwindowproc(Oldwndproc&,Hwnd&,Message&,Wparam&,Lparam&)
Endproc
Declare Up&,Down&,Oldwndproc&,Up%,Plugin&[64],Pcount%
Windowstyle 26
Windowtitle "Testprogramm"
Window 100,100-800,632
Set("FastMode",1)
~Appendmenu(~Getsystemmenu(%Hwnd,0),~Mft_separator,0,0)
~Appendmenu(~Getsystemmenu(%Hwnd,0),~Mft_string,5000,"Über Programm 1.0")
Oldwndproc&=~Getwindowlong(%Hwnd,~Gwl_wndproc)
~Setwindowlong(%Hwnd,~Gwl_wndproc,Procaddr("SystemMenu",4))
Up&=Createbutton(%Hwnd,"/",1,1,194,20)
Down&=Createbutton(%Hwnd,Add$(Chr$($5C),Chr$($2F)),1,580,194,20)
Whileloop 0,13
Plugin&[&Loop]=Control("Button",Str$(&Loop),Add($40008088,If(Lt(Pcount%,9),$10000000,0)),2,Add(Mul(62,&Loop),22),194,60,%Hwnd,Add(1001,&Loop),%Hinstance)
Inc Pcount%
Wend
While 1
Enablewindow Up&,Neq(Up%,0)
Enablewindow Down&,Gt(Sub(Sub(Pcount%,9),Up%),0)
Waitinput
casenot (external("USER32","GetAsyncKeyState",1)<>0) : continue
If Getfocus(Up&)
Hochscrollen
Showwindow(Plugin&[Sub(Up%,1)],1)
Dec Up%
Whileloop Up%,Add(Up%,8)
Setwindowpos Plugin&[&Loop]=2,Add(22,Mul(62,Sub(&Loop,Up%)))-194,60
Wend
Showwindow(Plugin&[Add(Up%,9)],0)
Elseif Getfocus(Down&)
Runterscrollen
Showwindow(Plugin&[Up%],0)
Whileloop Up%,Add(Up%,8)
Setwindowpos Plugin&[Add(&Loop,1)]=2,Add(22,Mul(62,Sub(&Loop,Up%)))-194,60
Wend
Showwindow(Plugin&[Add(Up%,9)],1)
Inc Up%
Endif
Wend
|
| | | | |
| | Jac de Lad | Ahh! Ich merks mir. Bin mal auf deine Antwort gespannt. Wenns nicht geht, muss ich halt den Eintrag ausm Systemmenü wieder entfernen.
Schönes Wochenende, Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 11.11.2005 ▲ |
| |
| | | Ich glaub ich hab schon geantwortet. |
| | | | |
| | Jac de Lad | Huch, da warste wieder schneller als ich...ich habs ausprobiert: Scrollt nicht.
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 11.11.2005 ▲ |
| |
| | | Ich hätts net gepostet wenns net wenigstens bei mir funzen würde. Tjo hm... |
| | | | |
| | Michael Wodrich | Bei mir funktionieren beide, allerdings ohne Beschriftung der Buttons... |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 11.11.2005 ▲ |
| |
| | | Lol also 3 Varianten |
| | | | |
|
AntwortenThemenoptionen | 1.325 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |