Source/ Codesnippets | | | | | Andreas Miethe, URL=www.paules-pc-forum.de/forum/spezielles/123967-messagebox-avec-option.html#poste754182, ZEITPUNKT=26.12.2009
Messagebox avec Option une kleine Spielerei avec einer Messagebox et einem Hook. peut-être kanns oui quelqu'un gebrauchen. $H Windows.ph
$H Messages.ph
#############################
Messagebox-Konstanten
DEF &IDOK 1
DEF &IDCANCEL 2
DEF &IDABORT 3
DEF &IDRETRY 4
DEF &IDIGNORE 5
DEF &IDYES 6
DEF &IDNO 7
DEF &IDICON 20
DEF &IDPROMPT $FFFF
DEF &IDSTATIC $CAFE
#############################
Struct CWPSTRUCT = lParam&,wParam&,message&,hwnd&
Struct Rect = left&,top&,right&,bottom&
Déclarer Hook&,OldProc&
Déclarer B&,B1&
Proc MB
Paramètres wnd&,msg&,wparam&,lparam&
Déclarer Result&
sélectionner msg&
Caseof ~WM_INITDIALOG
Var Rect# = New(Rect)
~GetWindowRect(wnd&,Rect#)
~Movewindow(wnd&,Rect#.left&,rect#.top&,width(wnd&)+12,Height(wnd&)+40,1)
B& = Créer("CheckBox",wnd&,"Diese annonce pas wieder anzeigen",0,height(wnd&)-18,width(wnd&),18)
SendMessage(B&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
SendMessage(~GetDlgItem(wnd&,&IDICON),~STM_SETIMAGE,~IMAGE_ICON,~LoadIcon(%hInstance,"EIMER"))
Result& = 1
Caseof ~WM_COMMAND
Si lparam& = b&
Si Getcheck(B&)
B1& = 1
Endif
Endif
Caseof ~WM_NCDESTROY
~UnhookWindowsHookEx(Hook&)
Result& = 1
Endselect
Result& = ~CallWindowProc(OldProc&,wnd&,msg&,wparam&,lparam&)
Retour Result&
ENDPROC
Proc SetHook
Paramètres nCode&, wParam&, lParam&
Select nCode&
Caseof ~HC_ACTION
Var pw# = New(CWPSTRUCT)
pw# = lparam&
Si pw#.message& = ~WM_INITDIALOG
OldProc& = ~SetWindowlong(pw#.hwnd&,~GWL_WNDPROC,ProcAddr("MB",4))
Endif
EndSelect
Retour ~CallNextHookEx(Hook&, nCode&, wParam&, lParam&)
ENDPROC
Proc PRF_Messagebox
Set("Fastmode",1)
Paramètres body$, title$, flags&
Déclarer Result&
Flags& = Flags& | ~MB_ICONQUESTION
Hook& = ~SetWindowsHookEx(~WH_CALLWNDPROC, ProcAddr("SetHook",3), 0,~GetCurrentThreadId())
Result& = MessageBox(title$,body$, flags&)
Set("Fastmode",0)
Retour Result&
ENDPROC
cls
Imprimer PRF_Messagebox("Titel","Wirklich effacer ? ",~MB_YESNO)
Imprimer IF(B1&=1,"Nicht wieder anzeigen","wieder anzeigen")
Waitinput
Gruss Andreas
aussi très joli avec Hyperlinks: [...]
Andreas Miethe, Beitrag=55999, Zeitpunkt=06.02.2010
Per Hook allez une la quantité $H Windows.ph
$H Messages.ph
Struct CWPSTRUCT = lParam&,wParam&,message&,hwnd&
Struct Rect = left&,top&,right&,bottom&
#############################
Messagebox-Konstanten
DEF &IDOK 1
DEF &IDCANCEL 2
DEF &IDABORT 3
DEF &IDRETRY 4
DEF &IDIGNORE 5
DEF &IDYES 6
DEF &IDNO 7
DEF &IDHELP 9
DEF &IDTRYAGAIN 10
DEF &IDCONTINUE 11
DEF &IDICON 20
DEF &IDPROMPT $FFFF
DEF &IDSTATIC $CAFE
#############################
Proc MB
Paramètres wnd&,msg&,wparam&,lparam&
Déclarer Result&,W&,H&,b&
Result& = ~CallWindowProc(OldProc&,wnd&,msg&,wparam&,lparam&)
sélectionner msg&
Caseof ~WM_INITDIALOG
Var SRect# = New(Rect)
~GetWindowRect(wnd&,SRect#)
Dialog vergrössern et zentrieren
W& = SRect#.right& - SRect#.left&
H& = SRect#.bottom& -SRect#.top& + 40
~Movewindow(wnd&,((%maxx/2)-(W&/2)),((%maxy/2)-(H&/2)),W&,H&,1)
Positionen qui Controls 40 Pixel pour untern verchieben
~Getwindowrect(~GetDlgItem(wnd&,&IDSTATIC),SRect#)
~Mapwindowpoints(0,wnd&,SRect#,2)
~Movewindow(~GetDlgItem(wnd&,&IDSTATIC),0,SRect#.Top&+40,SRect#.Right&,SRect#.Bottom&,1)
Whileloop 1,11
Si ~IsWindow(~GetDlgItem(wnd&,&Boucle))
~Getwindowrect(~GetDlgItem(wnd&,&Boucle),SRect#)
~Mapwindowpoints(0,wnd&,SRect#,2)
~Setwindowpos(~GetDlgItem(wnd&,&Boucle),0,SRect#.Left&,SRect#.Top&+40,0,0,~SWP_NOSIZE | ~SWP_NOZORDER)
Endif
Endwhile
Position vom PROMPT holen
~Getwindowrect(~GetDlgItem(wnd&,&IDPROMPT),SRect#)
~Mapwindowpoints(0,wnd&,SRect#,2)
LINKS sous PROMPT anlegen
Link& = Contrôle("SysLink","<a>Besuch mon Homepage</a>",$50000000,SRect#.Left&,SRect#.Bottom&+10,width(wnd&),18,wnd&,4000,0,0)
SendMessage(Link&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
Mail& = Contrôle("SysLink","<a>Schick mir une Mail</a>",$50000000,SRect#.Left&,SRect#.Bottom&+30,width(wnd&),18,wnd&,4001,0,0)
SendMessage(Mail&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
Dispose SRect#
Result& = 1
Caseof ~WM_NOTIFY
Link abfragen
Si (Long(lparam&,8) = -2) and (Long(lParam&,0) = LINK&)
ShellExec("https://www.ampsoft.eu","open",~SW_SHOWNORMAL)
endif
Si (Long(lparam&,8) = -2) and (Long(lParam&,0) = Mail&)
ShellExec("Mailto://","open",~SW_SHOWNORMAL)
endif
Result& = 1
Caseof ~WM_NCDESTROY
~UnhookWindowsHookEx(Hook&)
Result& = 1
Endselect
Retour Result&
ENDPROC
Proc SetHook
Paramètres nCode&, wParam&, lParam&
Select nCode&
Caseof ~HC_ACTION
Var pw# = New(CWPSTRUCT)
pw# = lparam&
Si pw#.message& = ~WM_INITDIALOG
OldProc& = ~SetWindowlong(pw#.hwnd&,~GWL_WNDPROC,ProcAddr("MB",4))
Dispose pw#
Endif
EndSelect
Retour ~CallNextHookEx(Hook&, nCode&, wParam&, lParam&)
ENDPROC
Proc PRF_Messagebox
Set("Fastmode",1)
Paramètres body$, title$, flags&
Déclarer Result&
Hook& = ~SetWindowsHookEx(~WH_CALLWNDPROC, ProcAddr("SetHook",3), 0,~GetCurrentThreadId())
Result& = MessageBox(title$,body$, flags&)
Set("Fastmode",0)
Retour Result&
ENDPROC
ici gehts à l'attaque
Déclarer Hook&,OldProc&
Déclarer LINK&,Mail&
cls
Imprimer PRF_Messagebox("Eine Frage...","Wirklich effacer ?",~MB_YESNOCANCEL | ~MB_DEFBUTTON2 | ~MB_ICONQUESTION | ~MB_APPLMODAL)
Waitinput
|
| | | | |
| | | EndProcedure im Code geändert dans ENDPROC.
|
| | | | |
| | Dietmar Horn | Hab je déjà avant Stunden juste im XProfan-Manager et dans meiner Quellcodeammlung gebunkert, avec cela une solche "Perle" qui Allgemeinheit pas verlorengeht ... |
| | | Multimedia für Jugendliche und junge Erwachsene - MMJ Hoyerswerda e.V. [...] Windows 95 bis Windows 7 Profan² 6.6 bis XProfan X2 mit XPSE Das große XProfan-Lehrbuch: [...] | 27.12.2009 ▲ |
| |
| | H.Brill | iF: EndProcedure im Code geändert dans ENDPROC.
Programmierste stereo -> PureBasic + XProfan ? Hoffentlich venez là pas irgendwann la fois un Mischmasch raus, den aucun plus compilieren peux. |
| | | Benutze XPROFAN X3 + FREEPROFAN Wir sind die XProfaner. Sie werden von uns assimiliert. Widerstand ist zwecklos! Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.
Was die Borg können, können wir schon lange. | 27.12.2009 ▲ |
| |
| | Andreas Miethe
| H.Brill, Beitrag=55597, Zeitpunkt=27.12.2009
iF: EndProcedure im Code geändert dans ENDPROC. Programmierste stereo -> PureBasic + XProfan ?
Stereo ???
Delphi,Java,C,VB usw.usf.
là muss on déjà aufpassen, dass on pas durcheinander venez |
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 27.12.2009 ▲ |
| |
| | Jörg Sellmeyer | H.Brill, Beitrag=55597, Zeitpunkt=27.12.2009
iF: EndProcedure im Code geändert dans ENDPROC. Programmierste stereo -> PureBasic + XProfan ? Hoffentlich venez là pas irgendwann la fois un Mischmasch raus, den aucun plus compilieren lesen peux.
voilà iF doch déjà longtemps arrivé |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 27.12.2009 ▲ |
| |
| | Andreas Miethe
| ici encore un bunteres Beispiel avec Minuteur pour automatisches Schliessen. KompilierenMarqueSéparation $H Windows.ph
$H Messages.ph
#############################
Messagebox-Konstanten
DEF &IDOK 1
DEF &IDCANCEL 2
DEF &IDABORT 3
DEF &IDRETRY 4
DEF &IDIGNORE 5
DEF &IDYES 6
DEF &IDNO 7
DEF &IDICON 20
DEF &IDPROMPT $FFFF
DEF &IDSTATIC $CAFE
#############################
Struct CWPSTRUCT = lParam&,wParam&,message&,hwnd&
Struct Rect = left&,top&,right&,bottom&
Struct PAINTSTRUCT = hdc&,fErase&,rcPaint!Rect,fRestore&,fIncUpdate&,rgbReserved#(32)
Proc Disablexptheme
Var Ux& = ImportDll("UxTheme.dll","")
Parameters Wnd&
Declare Word#
Dim Word#,2
If UX&
Setwindowtheme(Wnd&, Word#, Word#)
Endif
Dispose Word#
FreeDll UX&
Endproc
Proc ShadowProc
Parameters wnd&,lparam&
If (~GetDlgCtrlID(wnd&) >= &IDOK) AND (~GetDlgCtrlID(wnd&) <= &IDNO)
Disablexptheme(wnd&)
Declare x&,y&,w&,h&,Brush&,Pen&,OldBrush&,OldPen&
Var Rect# = New(Rect)
Brush& = ~GetStockObject(~BLACK_BRUSH)
Pen& = ~GetStockObject(~NULL_PEN)
~GetClientRect(wnd&,Rect#)
~MapWindowpoints(wnd&,~GetParent(wnd&),Rect#,2)
x& = Rect#.left&+6
y& = Rect#.top&+6
w& = x&+(Rect#.right&-Rect#.left&)
h& = y&+(Rect#.bottom&-Rect#.top&)
OldBrush& = ~SelectObject(lParam&,Brush&)
OldPen& = ~SelectObject(lParam&,Pen&)
~Rectangle(lParam&,x&,y&,w&,h&)
~SelectObject(lParam&,OldBrush&)
~SelectObject(lParam&,OldPen&)
~DeleteObject(Brush&)
~DeleteObject(Pen&)
EndIf
Return 1
EndProc
Proc MB
Parameters wnd&,msg&,wparam&,lparam&
Declare Result&,W&,H&
select msg&
Caseof ~WM_INITDIALOG
Var DC& = ~GetDC(wnd&)
Var Rect# = New(Rect)
Var icon& = SendMessage(~GetDlgItem(wnd&,&IDICON),~STM_GETICON,0,0)
~GetWindowRect(wnd&,Rect#)
Dialog vergrössern und zentrieren
W& = Rect#.right& - Rect#.left& + 20
H& = Rect#.bottom& -Rect#.top& + 30
~Movewindow(wnd&,((%maxx/2)-(W&/2)),((%maxy/2)-(H&/2)),W&,H&,1)
Static-Control, auf dem die Buttons liegen, anpassen
~GetClientRect(~GetDlgItem(wnd&,&IDSTATIC),Rect#)
~MapWindowpoints(~GetDlgItem(wnd&,&IDSTATIC),wnd&,Rect#,2)
~Movewindow(~GetDlgItem(wnd&,&IDSTATIC),Rect#.left&,Rect#.top&,w&,44,1)
Dispose Rect#
Bitmap für Hintergrund anlegen
Pic& = Create("hNewPic",w&,h&,$FFFFFF)
Farbverlauf ins Bitmap
Startpaint Pic&
GradientRect(%hdc,0,0,w&,h&,$8000,$FF,0)
~DrawiconEx(%hdc,20,20,Icon&,32,32,0,0,$3)
If D&
TextColor $FFFF,$FF
Drawtext width(wnd&)-24,Height(wnd&)-20,Format$("%3.0f",D&)
Endif
EndPaint
Brush& = ~CreatePatternBrush(Pic&)
Bitmap für Static anlegen
ein Static-Control ist erst ab Vista vorhanden !
Pic1& = Create("hNewPic",w&,44,$0)
Farbverlauf ins Bitmap
Startpaint Pic1&
GradientRect(%hdc,0,0,w&/2,44,$FF,$8000,0)
GradientRect(%hdc,w&/2,0,w&,44,$8000,$FF,0)
EndPaint
Brush1& = ~CreatePatternBrush(Pic1&)
B& = Create("CheckBox",wnd&,"Diese Meldung nicht wieder anzeigen",0,height(wnd&)-20,width(wnd&),18)
Disablexptheme(B&)
SendMessage(B&,~WM_SETFONT,~GetStockObject(~ANSI_VAR_FONT),1)
ShowWindow(~GetDlgItem(wnd&,&IDICON),0)
Result& = 1
Caseof ~WM_PAINT
Var ps# = New(PAINTSTRUCT)
~BeginPaint(wnd&,ps#)
~EnumChildWindows(wnd&,ProcAddr("ShadowProc",2),ps#.hdc&)
~EndPaint(wnd&,ps#)
Dispose ps#
Caseof ~WM_CTLCOLORSTATIC
If lParam& = ~GetDlgItem(wnd&,&IDSTATIC)
Return Brush1&
else
~SetTextColor(wParam&,$FFFF)
~SetBkMode(wparam&,~Transparent)
Return ~GetStockObject(~NULL_BRUSH)
Endif
Caseof ~WM_CTLCOLORDLG
~SetBkMode(wparam&,~Transparent)
Return Brush&
Caseof ~WM_CTLCOLORBTN
~SetBkMode(wparam&,~Transparent)
Return ~GetStockObject(~NULL_BRUSH)
Caseof ~WM_TIMER
Dec D&
Startpaint wnd&
TextColor $FFFF,$FF
Drawtext width(wnd&)-24,Height(wnd&)-20,Space$(10)
Drawtext width(wnd&)-24,Height(wnd&)-20,Format$("%3.0f",D&)
Endpaint
If D& = 0
sendmessage(wnd&,~wm_close,0,0)
endif
Return 0
Caseof ~WM_COMMAND
If lparam& = b&
If Getcheck(B&)
B1& = 1
Endif
Endif
Result& = 1
Caseof ~WM_NCDESTROY
~Killtimer(wnd&,1)
~DeleteObject(Brush&)
~DeleteObject(Pic&)
~DeleteObject(Brush1&)
~DeleteObject(Pic1&)
~UnhookWindowsHookEx(Hook&)
Result& = 1
Endselect
Result& = ~CallWindowProc(OldProc&,wnd&,msg&,wparam&,lparam&)
Return Result&
Endproc
Proc SetHook
Parameters nCode&, wParam&, lParam&
Select nCode&
Caseof ~HC_ACTION
Var pw# = New(CWPSTRUCT)
pw# = lparam&
If pw#.message& = ~WM_INITDIALOG
If D& : ~Settimer(pw#.hwnd&,1,1000,0):Endif
OldProc& = ~SetWindowlong(pw#.hwnd&,~GWL_WNDPROC,ProcAddr("MB",4))
Dispose pw#
Endif
EndSelect
Return ~CallNextHookEx(Hook&, nCode&, wParam&, lParam&)
EndProc
Proc PRF_Messagebox
Set("Fastmode",1)
Parameters body$, title$, flags&
Declare Result&
Flags& = Flags& | ~MB_ICONQUESTION
Hook& = ~SetWindowsHookEx(~WH_CALLWNDPROC, ProcAddr("SetHook",3), 0,~GetCurrentThreadId())
Result& = MessageBox(title$,body$, flags&)
Set("Fastmode",0)
Return Result&
EndProc
Proc GradientRect
Parameters DC&,x%,y%,w%,h%,Color1&,Color2&,HV&
Declare GradRect#,Trivertex#
Dim GradRect#,8
Dim Trivertex#,32
Long Gradrect#,0 = 0,1
Long Trivertex#,0 =x%,y%
word Trivertex#,8=GETRVALUE(Color1&) << 8,GETGVALUE(Color1&) << 8,GETBVALUE(Color1&) << 8,0
Long Trivertex#,16=w%,h%
word Trivertex#,24=GETRVALUE(Color2&) << 8,GETGVALUE(Color2&) << 8,GETBVALUE(Color2&) << 8,0
External("Msimg32.dll","GradientFill",DC&,Trivertex#,2,Gradrect#,1,HV&)
Dispose Trivertex#
Dispose Gradrect#
EndProc
Hier gehts los
Declare Hook&,OldProc&
Declare B&,B1&
Declare X&,T&,Brush&,Pic&,Brush1&,Pic1&
Declare D&
TIMER auf 15 Sekunden setzen
D& = 15
Wenn D& = 0, dann kein Timer
Nach 15 Sekunden verschwindet die Box automatisch
cls
Print PRF_Messagebox("Eine Frage...","Wirklich löschen ?",~MB_YESNOCANCEL | ~MB_ICONQUESTION)
Print IF( >B1& =1, "Nicht wieder anzeigen", "wieder anzeigen")
Waitinput
|
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 27.12.2009 ▲ |
| |
| | Jörg Sellmeyer | très joli! chez mir wird allerdings, statt des Textes dans qui Checkbox, seulement un schwarzer poutre angezeigt. Ist eigentlich dein ~DeleteObject() autre chose comme cela profane ou bien pourrait on aussi simple DeleteObject h& verwenden? |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 27.12.2009 ▲ |
| |
| | Andreas Miethe
| Jörg Sellmeyer, Beitrag=55605, Zeitpunkt=27.12.2009
très joli! chez mir wird allerdings, statt des Textes dans qui Checkbox, seulement un schwarzer poutre angezeigt. Ist eigentlich dein ~DeleteObject() autre chose comme cela profane ou bien pourrait on aussi simple DeleteObject h& verwenden?
Relatif à la schwarzen poutre verstehe je pas, je habs oui extra sous XP getestet et fotografiert.
~DeleteObject() ou bien profanes DeleteObject ist wohl cela Selbe. |
| | | Gruss Andreas ________ ________ ________ ________ _ Profan 3.3 - XProfanX2 Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher Homepage : [...] | 27.12.2009 ▲ |
| |
| | | H.Brill, Beitrag=55597, Zeitpunkt=27.12.2009
iF: EndProcedure im Code geändert dans ENDPROC.
Programmierste stereo -> PureBasic + XProfan ?
alors je hab ne...aucune PB et coutume aussi keins afin de savons, dass EndProcedure wohl un ENDPROC hätte volonté devoir. ^ ^ |
| | | | |
| | Frank Abbing | Den schwarzen poutre peux je bestätigen. |
| | | | |
| | Jörg Sellmeyer | So sieht cela ensuite aus:
|
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 27.12.2009 ▲ |
| |
|
Zum QuelltextOptions du sujet | 12.664 Views |
Themeninformationencet Thema hat 9 participant: |