Français
SDK-Helfer/ Tools

ActionBox (bessere MessageBox)

 

Jens-Arne
Reumschüssel
allô zusammen,

ici gibt es maintenant Code pour une très deutlich verbesserte MessageBox, qui je ActionBox genannt habe. Alles ist dans reinem XProfan geschrieben.

ActionBoxen unterscheiden sich de MessageBoxen dadurch, dass
- beliebig viele Buttons avec libre gewählter Aufschrift possible sommes
- Text ab un certain Taille scrollbar ist
- Text- et Hintergrundfarbe libre bestimmt volonté peut
- qui Schriftart libre gewählt volonté peux
- deux weitere Icônes zur Disposition stehen
- libre wählbare Buttons seulement pour dem Scrollen entier pour unten aktiviert volonté peut
- une libre gewählte WAV-Dossier comme Sound benutzt volonté peux
- une selbst geschriebene PROC pour den Aider-Button benutzt volonté peux
- cela alles, mon je, très simple trop handhaben ist

ici qui Code. si on ihn ausführt, bekommt on une Reihe de Beispielen angezeigt, qui qui Opportunités verdeutlichen.

STRUCT S_ACTIONBOX=Caption$(256),Text$(10001),pText&,TextXSize&,TextMaxYSize&,TextColor&,BkColor&,AnzButtons&,ButtonTexts$(10000),DefButton&,ButtonXSize&,DeactivateButtonsTillLastLineSeen%,Icon&,Sound&,hFont&,HelpButton&,pHelpProc&,HelpProcParam&
STRUCT S_HELPINFO=cbSize&,iContextType&,iCtrlId&,hItemHandle&,dwContextId&,MousePosX&,MousePosY&
declare _XMessageBox_TextColor&,_XMessageBox_BkColor&,_XMessageBox_hFont&,_XMessageBox_pHelpProc&,_XMessageBox_HelpProcParam&
_XMessageBox_TextColor&=@rgb(0,0,0)
_XMessageBox_BkColor&=@rgb(255,255,255)
_XMessageBox_hFont&=0
_XMessageBox_pHelpProc&=0
_XMessageBox_HelpProcParam&=0

declare ab#,fn$,s$,i%

PROC ActionBox 'eigene MessageBox avec beliebigen Buttons, gescrolltem Text, beliebigen Farben et einem beliebigen Sound
'dim ab#,S_ACTIONBOX
'ab#.Caption$: Fensterüberschrift (peux être omis, ensuite ="Hinweis")
'ab#.Text$: Meldungstext avec un maximum 10000 marque (wird umgebrochen; Wörter, qui länger comme une la ligne sommes, volonté aufgeteilt)
'ab#.pText&: Pointer trop einem String avec einem beliebig langen Meldungstext (wird pris, si ab#.Text$="" et ab#.pText&<>0)
'ab#.TextXSize&: Breite des Textfeldes dans Pixeln (peux être omis, ensuite =400)
'ab#.TextMaxYSize&: maximale Hauteur des Textfeldes dans Pixeln (peux être omis, ensuite =500), pour Erreichen qui maximalen vertikalen Ausdehnung wird une Scrollbar benutzt
'ab#.TextColor&: Textfarbe (peux être omis, ensuite noir)
'ab#.BkColor&: Hintergrundfarbe (peux être omis, ensuite sais)
'ab#.AnzButtons&: Nombre de Buttons (peux être omis, ensuite un Ok-Button; si es gar aucun Buttons donner soll, sur -1 mettons) - un Aider-Button (siehe plus unten ab#.HelpButton&) wird pas dazugezählt!
'ab#.ButtonTexts$: Buttonbeschriftungen, par "|" getrennt - Den Text pour une eventuellen Aider-Button peux on comme letzten Text optionnel avec angeben (sonst wird "Aider" benutzt)
'ab#.DefButton&: numéro des Default-Buttons (peux être omis, ensuite qui erste Button; si es keinen Default-Button donner soll, sur -1 mettons)
'ab#.ButtonXSize&: Breite qui Buttons dans Pixeln (peux être omis, ensuite =100 bzw. =75 chez Default-Ok-Button)
'ab#.DeactivateButtonsTillLastLineSeen%: ici peut bitweise Buttons angegeben volonté, qui seulement aktiviert volonté, si qui Text jusqu'à zur letzten la ligne gescrollt wurde (Button 1: 1, Button 2: 2, Button 3: 4, Button 4: 8 etc.)
'ab#.HelpButton&: 1=fügt une Aider-Button hinzu (si cette geklickt wird, wird une ~WM_HELP-Message à l' Hauptfenster gesendet, wobei mir unklar ist, comment on qui auswerten peux, au cours de qui MessageBox cela Programme blockiert - Abhilfe: siehe direct ici drunter)
'ab#.pHelpProc: une avec @ProcAddr(...) ermittelte Einsprungadresse trop einer Procédure, qui aufgerufen wird, si qui Hilfebutton geklickt wird (cet PROC muss oui c'est ca une 4-Byte-paramètre avons)
'ab#.HelpProcParam&: un benutzerdefinierter paramètre, qui à qui HelpProc transfert wird
'ab#.Icon&: -1=kein Icon, 1=i, 2=?, 3=!, 4=X, 5=Security Shield, 6=Application Icon (peux être omis, ensuite =1 sans Sound)
'ab#.Sound&: 1=Windows-Sound convenable zum Icon, -1=kein Sound, 11-14=Sound comment chez Icon 1X, 15=Beep, >15=Pointer trop einem String avec einem Sound-Dateinamen (peux être omis, ensuite =1)
'cas ActionBox(ab#)=1: imprimer "Button 1 geklickt"
'dispose ab#
'----------------------------------------------
'Es reicht alors, seulement ab#.Text$ trop mettons, um un minimalistisches Hinweisfenster avec einem "i"-Icon et einem Ok-Button sans Sound trop conservé.
'----------------------------------------------
'Rückgabewert: numéro des angeklickten Buttons bzw. 0 chez Esc. et chez la fenêtre schließen ("X"-Button à droite dessus)
parameters ab#
declare a%,b%,c%,d%,i%,o%,b#,hD%,hB%[],meldungstext$,s$,s2$,s3$,lines$[],anzlines%,aktline%,workline$,ende%,aktword%,anzwords%,savedfont%,saveddialogfont%,yofs%,xsize%,ysize%,ret%,hF%
declare xtextsize%,textrandsize%,xiconsize%,xbuttonsize%,ybuttonsize%,IconX1%,IconY1%,IconX2%,IconY2%,hVertScrollbar%,usevertscrollbar%,maxvscrollpos%,oldvscrollpos%,aktzeile%,oldfastmode%,hIcon%
declare HelpInfo#,oldusermess16%,oldusermess522%
oldfastmode%=@Set("FastMode",0)
'{ 'Utilisateur Messages anlegen
oldusermess16%=@IsUserMessage($10)
si oldusermess16%=0
usermessages $10
endif
oldusermess522%=@IsUserMessage(522)
si oldusermess522%=0
usermessages 522
endif
'}
'{ 'Variablen füllen
meldungstext$=""
si ab#.Text$<>""
meldungstext$=ab#.Text$
elseif ab#.pText&<>0
meldungstext$=@string$(ab#.pText&,0)
endif
dim HelpInfo#,S_HELPINFO
ret%=0
textrandsize%=10
hVertScrollbar%=0
usevertscrollbar%=0
oldvscrollpos%=0
anzlines%=0
hF%=@create("FONT","Segoe L'assurance-chômage",-12,0,0,0,0)
'}
'{ 'Default-Werte mettons, si pas angegeben
si ab#.TextXSize&=0
ab#.TextXSize&=400
endif
si ab#.TextMaxYSize&=0
ab#.TextMaxYSize&=500
endif
si ab#.BkColor&=0
ab#.BkColor&=@rgb(255,255,255)
endif
si ab#.Icon&=0
ab#.Icon&=1
si ab#.Sound&=0
ab#.Sound&=-1
endif
endif
si ab#.Icon&>0
xiconsize%=50
d'autre
xiconsize%=0
endif
si ab#.Caption$=""
ab#.Caption$="Hinweis"
si ab#.Icon&=2
ab#.Caption$="Frage"
elseif ab#.Icon&=3
ab#.Caption$="attention"
elseif ab#.Icon&=4
ab#.Caption$="faute"
endif
endif
si ab#.Sound&=0
ab#.Sound&=1
endif
si ab#.ButtonXSize&=0
si ab#.AnzButtons&>0
ab#.ButtonXSize&=100
d'autre
ab#.ButtonXSize&=75
endif
endif
si ab#.AnzButtons&=0
ab#.AnzButtons&=1
ab#.ButtonTexts$="Ok"
endif
si ab#.HelpButton&
ab#.AnzButtons&=ab#.AnzButtons&+1
si @substr$(ab#.ButtonTexts$,ab#.AnzButtons&,"|")=0
si ab#.ButtonTexts$<>""
ab#.ButtonTexts$=ab#.ButtonTexts$+"|"
endif
ab#.ButtonTexts$=ab#.ButtonTexts$+"Aider"
endif
endif
si ab#.AnzButtons&>0
si ab#.DefButton&=0
ab#.DefButton&=1 'si es keinen Default-Button donner soll, sur -1 mettons
elseif ab#.DefButton&>ab#.AnzButtons& 'es wurde évident oublier qc, pour einer vorherigen ActionBox avec plus Buttons comme cette den DefButton so trop mettons, dass il trop cette ActionBox passt --> Button 1 prendre
ab#.DefButton&=1 'si es keinen Default-Button donner soll, sur -1 mettons
endif
endif
si ab#.hFont&=0
usefont "Segoe L'assurance-chômage",-12,0,0,0,0
d'autre
SetGrafikFont ab#.hFont&
endif
'}
xtextsize%=ab#.TextXSize&
si ab#.Icon&<1
xtextsize%=xtextsize%+50 'xiconsize%
endif
xsize%=xiconsize%+textrandsize%+xtextsize%+textrandsize%
xbuttonsize%=ab#.ButtonXSize&
ybuttonsize%=25
savedfont%=@GetGrafikFont()
'{ '"\t" dans six Spaces verwandeln
meldungstext$=@translate$(meldungstext$,"\t"," ")
'}
si meldungstext$<>""
'{ 'Zeilenumbrüche ("\n") durchführen
anzlines%=1
lines$[1]=meldungstext$
i%=1
tandis que i%<=anzlines%
si @instr("\n",lines$[i%])
inc anzlines%
for o%,anzlines%-1,i%+1,-1
lines$[o%+1]=lines$[o%]
endfor 'o%
s$=lines$[i%]
lines$[i%]=@left$(s$,@instr("\n",s$)-1)
lines$[i%+1]=@right$(s$,@len(s$)-@instr("\n",s$)-1)
endif
inc i%
endwhile
'}
'{ 'text$ dans einzelne Zeilen aufteilen
ende%=0
aktword%=0
aktline%=1
workline$=lines$[aktline%]
anzwords%=@len(workline$," ")
s$=""
whilenot ende%
si anzwords%=0
d'autre
inc aktword%
si @GetDrawStringLenX(s$+" "+@substr$(workline$,aktword%," "))<=xtextsize%
cas s$<>"": s$=s$+" "
s$=s$+@substr$(workline$,aktword%," ")
d'autre
si @GetDrawStringLenX(@substr$(workline$,aktword%," "))<=xtextsize%
dec aktword%
lines$[aktline%]=s$
inc anzlines%
for i%,anzlines%-1,aktline%+1,-1
lines$[i%+1]=lines$[i%]
endfor 'i%
inc aktline%
s$=""
d'autre 'cela einzelne mot ist länger comme une la ligne: Buchstabe pour Buchstabe verkürzen et mot partager
s2$=@substr$(workline$,aktword%," ")
for i%,@len(s2$)-1,1,-1
si @GetDrawStringLenX(@left$(s2$,i%)+" ")<=xtextsize%
s2$=@left$(s2$,i%)+" "+@right$(s2$,@len(s2$)-i%)
pause
endif
endfor 'i%
s3$=""
for i%,1,anzwords%
cas s3$<>"": s3$=s3$+" "
si i%<>aktword%
s3$=s3$+@substr$(workline$,i%," ")
d'autre
s3$=s3$+s2$
endif
endfor 'i%
workline$=s3$
dec aktword%
inc anzwords%
endif
endif
endif
si aktword%=anzwords%
si s$<>""
lines$[aktline%]=s$
endif
si aktline%=anzlines%
ende%=1
d'autre
inc aktline%
workline$=lines$[aktline%]
anzwords%=@len(workline$," ")
aktword%=0
s$=""
endif
endif
endwhile
'}
endif
'{ 'ggf. une zweite la ligne hinzufügen (avec Icon sieht seulement une la ligne doof aus)
si ab#.Icon&>0
tandis que anzlines%<2
inc anzlines%
lines$[anzlines%]=""
endwhile
endif
'}
'{ 'xsize% anpassen
a%=0
for i%,1,anzlines%
si lines$[i%]<>""
b%=@GetDrawStringLenX(lines$[i%])
si b%>a%
a%=b%
endif
endif
endfor 'i%
xtextsize%=a%+textrandsize%
xsize%=xiconsize%+textrandsize%+xtextsize%+textrandsize%
si xsize%<(textrandsize%*(ab#.AnzButtons&+1))+(xbuttonsize%*ab#.AnzButtons&)+(2*@GetWindowThinBorderWidth())
xsize%=(textrandsize%*(ab#.AnzButtons&+1))+(xbuttonsize%*ab#.AnzButtons&)+(2*@GetWindowThinBorderWidth())
endif
'}
'{ 'yofs% & ysize& ermitteln
yofs%=GetDrawStringLenY("X")
si (anzlines%*yofs%)<=ab#.TextMaxYSize&
ysize%=textrandsize%+(anzlines%*yofs%)+(textrandsize%*2)+ybuttonsize%+textrandsize%+(2*@GetWindowThinBorderWidth())
d'autre
usevertscrollbar%=1
ysize%=textrandsize%+(ab#.TextMaxYSize&)+(textrandsize%*2)+ybuttonsize%+textrandsize%+(2*@GetWindowThinBorderWidth())
endif
'}
'{ 'xsize% à mögliche Scrollbar anpassen
si usevertscrollbar%
xsize%=xsize%+15
endif
'}
'{ 'Dialog aufbauen
hD%=@create("DIALOG",%HWnd,ab#.Caption$,((%maxx\2)-(xsize%\2)),((%maxy\2)-(ysize%\2)),xsize%,ysize%)
a%=@GetAbsWindowPosX1(hD%)
b%=@GetAbsWindowPosY1(hD%)
c%=@GetAbsWindowPosX2(hD%)
d%=@GetAbsWindowPosY2(hD%)
SetWindowPos hD%=a%,(b%-((ysize%-@height(hD%))\2))-(c%-a%),((d%-b%)+(ysize%-@height(hD%)));-1
saveddialogfont%=@GetDialogFont()
SetDialogFont hF%
Début de peinture hD%
'{ 'Hintergrund malen
'cls @rgb(255,255,255)
UseBrush 1,ab#.BkColor& '@rgb(255,255,255)
USEP 0,0,ab#.BkColor& '@rgb(255,255,255)
rectangle 0,0-@width(hD%),(@height(hD%)-textrandsize%-ybuttonsize%-textrandsize%)
'}
'{ 'Scrollbar erstellen
si usevertscrollbar%
hVertScrollbar%=@Créer("VScroll",hD%,"",@width(hD%)-15,0,15,textrandsize%+ab#.TextMaxYSize&+textrandsize%)
maxvscrollpos%=anzlines%-(ab#.TextMaxYSize&\yofs%)+1
SetScrollRange hVertScrollbar%,1,maxvscrollpos%
oldvscrollpos%=@GetScrollPos(hVertScrollbar%)
endif
'}
'{ 'Icon zeichnen
si ab#.Icon&>0
IconX1%=10
IconY1%=10
IconX2%=IconX1%+35
IconY2%=IconY1%+35
'{ 'JR-Icônes (selbst gezeichnet) - auskommentiert
/*
'{ '1=i
si ab#.Icon&=1
UseBrush 1,@rgb(0,100,255)
USEP 0,0,@rgb(0,0,0)
ellipse IconX1%,IconY1%-IconX2%,IconY2%
usefont "Times New Roman",30,0,1,0,0
textcolor @rgb(255,255,255),-1
drawtext IconX1%+((IconX2%-IconX1%)\2),IconY1%+1,"i",6
'}
'{ '2=?
elseif ab#.Icon&=2
UseBrush 1,@rgb(0,100,255)
USEP 0,0,@rgb(0,0,0)
ellipse IconX1%,IconY1%-IconX2%,IconY2%
usefont "Times New Roman",30,0,1,0,0
textcolor @rgb(255,255,255),-1
drawtext IconX1%+((IconX2%-IconX1%)\2)+1,IconY1%+2,"?",6
'}
'{ '3=!
elseif ab#.Icon&=3
UseBrush 1,@rgb(255,220,0)
USEP 0,2,@rgb(255,180,0)
line IconX1%,IconY2%-(IconX1%+((IconX2%-IconX1%)\2)),IconY1%
line (IconX1%+((IconX2%-IconX1%)\2)),IconY1%-IconX2%,IconY2%
line IconX1%,IconY2%-IconX2%,IconY2%
fill IconX1%+10,IconY2%-10,@rgb(255,180,0)
usefont "Arial",30,0,1,0,0
textcolor @rgb(0,0,0),-1
drawtext IconX1%+((IconX2%-IconX1%)\2)+1,IconY1%+5,"!",6
'}
'{ '4=X
elseif ab#.Icon&=4
UseBrush 1,@rgb(255,0,0)
USEP 0,0,@rgb(0,0,0)
ellipse IconX1%,IconY1%-IconX2%,IconY2%
usefont "Arial",30,0,1,0,0
textcolor @rgb(255,255,255),-1
drawtext IconX1%+((IconX2%-IconX1%)\2)+1,IconY1%+2,"X",6
'}
*/
'}
'{ 'Windows-Icônes
'{ '1=i
si ab#.Icon&=1
hIcon%=@external("USER32.DLL","LoadIconA",0,32516) '32516=~IDI_INFORMATION
drawicon hIcon%,IconX1%,IconY1%
'}
'{ '2=?
elseif ab#.Icon&=2
hIcon%=@external("USER32.DLL","LoadIconA",0,32514) '32514=~IDI_QUESTION
drawicon hIcon%,IconX1%,IconY1%
'}
'{ '3=!
elseif ab#.Icon&=3
hIcon%=@external("USER32.DLL","LoadIconA",0,32515) '32515=~IDI_WARNING
drawicon hIcon%,IconX1%,IconY1%
'}
'{ '4=X
elseif ab#.Icon&=4
hIcon%=@external("USER32.DLL","LoadIconA",0,32513) '32513=~IDI_ERROR
drawicon hIcon%,IconX1%,IconY1%
'}
'{ '5=Security Shield
elseif ab#.Icon&=5
hIcon%=@external("USER32.DLL","LoadIconA",0,32518) '32518=~IDI_SHIELD
drawicon hIcon%,IconX1%,IconY1%
'}
'{ '6=Application Icon
elseif ab#.Icon&=6
'hIcon%=@external("USER32.DLL","LoadIconA",0,~IDI_APPLICATION) '~IDI_WINLOGO 'funktioniert beides pas richtig
dim b#,10001
@external("KERNEL32.DLL","GetModuleFileNameA",0,b#,10000)
hIcon%=@create("HICON",@string$(b#,0),0)
dispose b#
drawicon hIcon%,IconX1%,IconY1%
DeleteObject hIcon%
'}
'}
endif
textcolor @rgb(0,0,0),-1
endif
'}
'{ 'Text écrivons
si ab#.hFont&=0
usefont "Segoe L'assurance-chômage",-12,0,0,0,0
d'autre
SetGrafikFont ab#.hFont&
endif
textcolor ab#.TextColor&,-1
aktzeile%=1
a%=aktzeile%
si usevertscrollbar%
b%=aktzeile%+((ab#.TextMaxYSize&\yofs%)-1)
d'autre
b%=anzlines%
endif
for i%,a%,b%
drawtext xiconsize%+textrandsize%,textrandsize%+(yofs%*(i%-a%)),lines$[i%],0
endfor 'i%
'}
EndPaint
'{ 'Buttons erstellen
for i%,1,ab#.AnzButtons&
si i%<>ab#.DefButton&
hB%[i%]=@create("BUTTON",hD%,@substr$(ab#.ButtonTexts$,i%,"|"),@width(hD%)-(textrandsize%*(ab#.AnzButtons&-(i%-1)))-(xbuttonsize%*(ab#.AnzButtons&-(i%-1))),@height(hD%)-(ybuttonsize%+textrandsize%),xbuttonsize%,ybuttonsize%)
d'autre
hB%[i%]=@create("DEFBUTTON",hD%,@substr$(ab#.ButtonTexts$,i%,"|"),@width(hD%)-(textrandsize%*(ab#.AnzButtons&-(i%-1)))-(xbuttonsize%*(ab#.AnzButtons&-(i%-1))),@height(hD%)-(ybuttonsize%+textrandsize%),xbuttonsize%,ybuttonsize%)
endif
endfor 'i%
si ab#.DefButton&>0
@setfocus(hB%[ab#.DefButton&])
endif
si usevertscrollbar%
for i%,1,ab#.AnzButtons&
si (ab#.DeactivateButtonsTillLastLineSeen% & (2 ^ (i%-1)))=(2 ^ (i%-1))
enablewindow hB%[i%],0
endif
endfor 'i%
endif
'}
'{ 'Ton abspielen
si ab#.Sound&=1
si ab#.Icon&=1
MessageBeep($40) '~MB_ICONASTERISK
elseif ab#.Icon&=2
MessageBeep($20) '~MB_ICONQUESTION
elseif ab#.Icon&=3
MessageBeep($30) '~MB_ICONEXCLAMATION
elseif ab#.Icon&=4
MessageBeep($10) '~MB_ICONERROR
elseif ab#.Icon&=5
MessageBeep($30) '~MB_ICONEXLAMATION
endif
elseif ab#.Sound&=11
MessageBeep($40) '~MB_ICONASTERISK
elseif ab#.Sound&=12
MessageBeep($20) '~MB_ICONQUESTION
elseif ab#.Sound&=13
MessageBeep($30) '~MB_ICONEXCLAMATION
elseif ab#.Sound&=14
MessageBeep($10) '~MB_ICONERROR
elseif ab#.Sound&=15
MessageBeep(0) '~MB_OK (Standard-Beep)
elseif ab#.Sound&>15
PlaySound @string$(ab#.Sound&,0),1
endif
'}
'}
'{ 'Eingabehandling
ende%=0
whilenot ende%
waitinput
'{ 'Esc. bzw. la fenêtre schließen
si (((@iskey(27)=1) or (%umessage=$10)) and (@external("USER32.DLL","GetForegroundWindow")=hD%))
ende%=1
ret%=0
tandis que @iskey(27)
sleep 25
endwhile
ClearKeyboardBuffer
'}
'{ 'Scrollbar
elseif (usevertscrollbar%=1) and (@GetScrollPos(hVertScrollbar%)<>oldvscrollpos%)
oldvscrollpos%=@GetScrollPos(hVertScrollbar%)
Début de peinture hD%
UseBrush 1,ab#.BkColor& '@rgb(255,255,255)
USEP 0,0,ab#.BkColor& '@rgb(255,255,255)
rectangle xiconsize%,textrandsize%-(xiconsize%+xtextsize%+textrandsize%),(textrandsize%+ab#.TextMaxYSize&)
si ab#.hFont&=0
usefont "Segoe L'assurance-chômage",-12,0,0,0,0
d'autre
SetGrafikFont ab#.hFont&
endif
textcolor ab#.TextColor&,-1
aktzeile%=oldvscrollpos%
a%=aktzeile%
b%=aktzeile%+((ab#.TextMaxYSize&\yofs%)-1)
for i%,a%,b%
drawtext xiconsize%+textrandsize%,textrandsize%+(yofs%*(i%-a%)),lines$[i% ],0
endfor 'i%
EndPaint
si usevertscrollbar%
si oldvscrollpos%=maxvscrollpos%
for i%,1,ab#.AnzButtons&
si (ab#.DeactivateButtonsTillLastLineSeen% & (2 ^ (i%-1)))=(2 ^ (i%-1))
enablewindow hB%[i%],1
endif
endfor 'i%
endif
endif
'}
'{ 'Mausrad
elseif %uMessage=522
si &uwParam<0 'nach unten gedreht
a%=@GetScrollPos(hVertScrollbar%)
inc a%
if a%>maxvscrollpos%
a%=maxvscrollpos%
endif
if a%<>oldvscrollpos%
oldvscrollpos%=a%
SetScrollPos hVertScrollbar%,oldvscrollpos%
StartPaint hD%
UseBrush 1,ab#.BkColor& '@rgb(255,255,255)
USEP 0,0,ab#.BkColor& '@rgb(255,255,255)
rectangle xiconsize%,textrandsize%-(xiconsize%+xtextsize%+textrandsize%),(textrandsize%+ab#.TextMaxYSize&)
si ab#.hFont&=0
usefont "Segoe L'assurance-chômage",-12,0,0,0,0
d'autre
SetGrafikFont ab#.hFont&
endif
textcolor ab#.TextColor&,-1
aktzeile%=oldvscrollpos%
a%=aktzeile%
b%=aktzeile%+((ab#.TextMaxYSize&\yofs%)-1)
for i%,a%,b%
drawtext xiconsize%+textrandsize%,textrandsize%+(yofs%*(i%-a%)),lines$[i% ],0
endfor 'i%
EndPaint
si oldvscrollpos%=maxvscrollpos%
for i%,1,ab#.AnzButtons&
si (ab#.DeactivateButtonsTillLastLineSeen% & (2 ^ (i%-1)))=(2 ^ (i%-1))
enablewindow hB%[i%],1
endif
endfor 'i%
endif
endif
elseif &uwParam>0 'pour dessus gedreht
a%=@GetScrollPos(hVertScrollbar%)
dec a%
si a%<1
a%=1
endif
si a%<>oldvscrollpos%
oldvscrollpos%=a%
SetScrollPos hVertScrollbar%,oldvscrollpos%
Début de peinture hD%
UseBrush 1,ab#.BkColor& '@rgb(255,255,255)
USEP 0,0,ab#.BkColor& '@rgb(255,255,255)
rectangle xiconsize%,textrandsize%-(xiconsize%+xtextsize%+textrandsize%),(textrandsize%+ab#.TextMaxYSize&)
si ab#.hFont&=0
usefont "Segoe L'assurance-chômage",-12,0,0,0,0
d'autre
SetGrafikFont ab#.hFont&
endif
textcolor ab#.TextColor&,-1
aktzeile%=oldvscrollpos%
a%=aktzeile%
b%=aktzeile%+((ab#.TextMaxYSize&\yofs%)-1)
for i%,a%,b%
drawtext xiconsize%+textrandsize%,textrandsize%+(yofs%*(i%-a%)),lines$[i% ],0
endfor 'i%
EndPaint
endif
endif
'}
'{ 'Buttons
d'autre
'{ 'normale Buttons
si ab#.HelpButton&=0
a%=ab#.AnzButtons&
d'autre
a%=ab#.AnzButtons&-1
endif
for i%,1,a%
si @clicked(hB%[i%])
ende%=1
ret%=i%
pause
endif
endfor 'i%
'}
'{ 'Help-Button
si ende%=0
si ab#.HelpButton&
si @clicked(hB%[ab#.AnzButtons&])
HelpInfo#.cbsize&=@sizeof(HelpInfo#)
HelpInfo#.iContextType&=1 '1=~HELPINFO_WINDOW
HelpInfo#.iCtrlId&=0
HelpInfo#.hitemhandle&=hD%
HelpInfo#.dwContextId&=0
HelpInfo#.MousePosX&=@MouseAbsX()
HelpInfo#.MousePosY&=@MouseAbsY()
@sendmessage(%HWnd,83,0,HelpInfo#) '83=~WM_HELP
si ab#.pHelpProc&
SetWindowPos hD%=@GetAbsWindowPosX1(hD%),@GetAbsWindowPosY1(hD%)-(@GetAbsWindowPosX2(hD%)-@GetAbsWindowPosX1(hD%)),(@GetAbsWindowPosY2(hD%)-@GetAbsWindowPosY1(hD%));1 'ActionBox dans den Hintergrund befördern, là vous eigentlich topmost ist et un ggf. de qui HelpProc benutztes la fenêtre überdecken serait
@call(ab#.pHelpProc&,ab#.HelpProcParam&)
SetWindowPos hD%=@GetAbsWindowPosX1(hD%),@GetAbsWindowPosY1(hD%)-(@GetAbsWindowPosX2(hD%)-@GetAbsWindowPosX1(hD%)),(@GetAbsWindowPosY2(hD%)-@GetAbsWindowPosY1(hD%));-1 'ActionBox wieder topmost faire
si @iskey(27)
tandis que @iskey(27)
sleep 25
endwhile
ClearKeyboardBuffer
endif
endif
endif
endif
endif
'}
'}
endif
endwhile
'}
'{ 'aufräumen
@setfocus(%HWnd)
@destroywindow(hD%)
DeleteObject hF%
SetGrafikFont savedfont%
SetDialogFont saveddialogfont%
dispose HelpInfo#
'{ 'Utilisateur Messages wiederherstellen
si oldusermess16%=0
usermessages -$10
endif
si oldusermess522%=0
usermessages -522
endif
'}
@set("FastMode",oldfastmode%)
'}
return ret%
ENDPROC 'ActionBox

PROC ActionBoxReset 'mets alle Werte einer ActionBox-Bereichsvariablen sur Standard zurück (pratique, si on qui Bereichsvariable weiterbenutzen voudrais et auparavant viele individuelle Einstellungen vorgenommen hat)
parameters ab#
@external("KERNEL32.DLL","RtlFillMemory",ab#,@sizeof(ab#),0)
ENDPROC 'ActionBoxReset

PROC XMessageBox 'simuliert une Standard-MessageBox (gleiche paramètre et Ausgabewerte) avec den Vorteilen qui ActionBox; simple "MessageBox" im Code par "XMessageBox" ersetzen (et cet Prozeduren sowie qui globalen Struktur- et Variablendefinitionen prendre naturellement)
'il y a cinq globale Variablen, à Standard-Messageboxen doch un bisschen individuel gestalten trop peut:
'_XMessageBox_TextColor&: Textfarbe (avec @RGB(...) trop erzeugen)
'_XMessageBox_BkColor&: Hintergrundfarbe (avec @RGB(...) trop erzeugen)
'_XMessageBox_hFont&: Schriftart (avec @Créer("FONT",...) trop erzeugen)
'_XMessageBox_pHelpProc&: Einsprungadresse trop einer Help-Procédure, qui aufgerufen wird, si on den Aider-Button aktiviert et ihn geklickt hat (ist avec @procaddr(...) trop ermitteln; qui PROC muss oui c'est ca une 4-Byte-paramètre avons)
'_XMessageBox_HelpProcParam&: un benutzerdefinierter paramètre, qui qui Help-Procédure transfert wird
parameters text$,caption$,flags&
declare ab#,ret&
ret&=0
dim ab#,S_ACTIONBOX
ab#.Caption$=caption$
ab#.pText&=@addr(text$)
ab#.TextXSize&=325
ab#.TextColor&=_XMessageBox_TextColor&
ab#.BkColor&=_XMessageBox_BkColor&
si _XMessageBox_hFont&
ab#.hFont&=_XMessageBox_hFont&
endif
'{ 'Flags auswerten
'{ 'Buttons
si (flags& & 5)=5
ab#.AnzButtons&=2
ab#.ButtonTexts$="Wiederholen|Abbrechen"
elseif (flags& & 4)=4
ab#.AnzButtons&=2
ab#.ButtonTexts$="Ja|Nein"
elseif (flags& & 3)=3
ab#.AnzButtons&=3
ab#.ButtonTexts$="Ja|Nein|Abbrechen"
elseif (flags& & 1)=1
ab#.AnzButtons&=2
ab#.ButtonTexts$="OK|Abbrechen"
elseif (flags& & 2)=2
ab#.AnzButtons&=3
ab#.ButtonTexts$="Abbrechen|Wiederholen|Ignorieren"
endif
si (flags& & 768)=768
ab#.DefButton&=4
elseif (flags& & 256)=256
ab#.DefButton&=2
elseif (flags& & 512)=512
ab#.DefButton&=3
d'autre
ab#.DefButton&=1
endif
'}
'{ 'Icon
si (flags& & 96)=96
ab#.Icon&=-1
ab#.Sound&=15
elseif (flags& & 64)=64
ab#.Icon&=1
elseif (flags& & 48)=48
ab#.Icon&=3
elseif (flags& & 16)=16
ab#.Icon&=4
elseif (flags& & 32)=32
ab#.Icon&=2
d'autre
ab#.Icon&=-1
endif
'}
'{ 'Aider-Button
si (flags& & 16384)=16384
ab#.HelpButton&=1
si _XMessageBox_pHelpProc&
ab#.pHelpProc&=_XMessageBox_pHelpProc&
ab#.HelpProcParam&=_XMessageBox_HelpProcParam&
endif
endif
'}
'}
ret&=@ActionBox(ab#)
'{ 'Ergebnis mappen
si (flags& & 5)=5
'ab#.ButtonTexts$="Wiederholen|Abbrechen"
si ret&=1
ret&=4
elseif ret&=2
ret&=2
endif
elseif (flags& & 4)=4
'ab#.ButtonTexts$="Ja|Nein"
si ret&=1
ret&=6
elseif ret&=2
ret&=7
endif
elseif (flags& & 3)=3
'ab#.ButtonTexts$="Ja|Nein|Abbrechen"
si ret&=1
ret&=6
elseif ret&=2
ret&=7
elseif ret&=3
ret&=2
endif
elseif (flags& & 1)=1
'ab#.ButtonTexts$="OK|Abbrechen"
si ret&=1
ret&=1
elseif ret&=2
ret&=2
endif
elseif (flags& & 2)=2
'ab#.ButtonTexts$="Abbrechen|Wiederholen|Ignorieren"
si ret&=1
ret&=3
elseif ret&=2
ret&=4
elseif ret&=3
ret&=5
endif
endif
'}
dispose ab#
return ret&
ENDPROC 'XMessageBox

PROC pHelpProc 'wird vom Aider-Button einer ActionBox aufgerufen
'ici peux malheureusement aucun weitere ActionBox benutzt volonté! cela gäbe Variablenkonflikte. si on cela absolument voudrais, muss on qui ActionBox-Proc hierfür duplizieren (z.B. comme PROC ActionBox2).
parameters hActionBox& 'benutzerdefinierter paramètre (ab#.HelpProcParam& im Hauptprogramm), wird ici pas plus benutzt - hilfreich z.B., si on sur verschiedene ActionBoxes avec unterschiedlicher Aider réagir voudrais (ginge naturellement aussi avec separaten Procs)
@MessageBox("Aider-Procédure aufgerufen. Vermutlich ist une DLL défaut.\n\nKeine panique, ca ist seulement une Simulation.","Aider-Procédure",64)
ENDPROC 'pHelpProc

'{ 'Hilfsfunktionen:
PROC MessageBeep
'{ 'mögliche Werte pour flag
' Value Meaning
'
' 0xFFFFFFFF A simple beep. Si le sound card is not available, le sound is generated using le speaker.
'
' MB_ICONASTERISK
' 0x00000040L
' See MB_ICONINFORMATION.
'
' MB_ICONEXCLAMATION
' 0x00000030L
' See MB_ICONWARNING.
'
' MB_ICONERROR
' 0x00000010L
' The sound specified as le Windows Critical Stop sound.
'
' MB_ICONHAND
' 0x00000010L
' See MB_ICONERROR.
'
' MB_ICONINFORMATION
' 0x00000040L
' The sound specified as le Windows Asterisk sound.
'
' MB_ICONQUESTION
' 0x00000020L
' The sound specified as le Windows Question sound.
'
' MB_ICONSTOP
' 0x00000010L
' See MB_ICONERROR.
'
' MB_ICONWARNING
' 0x00000030L
' The sound specified as le Windows Exclamation sound.
'
' MB_OK
' 0x00000000L
' The sound specified as le Windows Default Beep sound.
'}
parameters flag&
declare pc&
pc&=%pcount
si pc&=0
flag&=$FFFFFFFF
endif
@external("USER32.DLL","MessageBeep",flag&)
ENDPROC 'MessageBeep
PROC GetGrafikFont 'gibt aussi chez qui Systemschriftart un gültiges Handle zurück (et pas 0); cela peux später aussi wieder zum mettons benutzt volonté
parameters HDC&
declare a&,pc&
pc&=%PCount
si pc&=0
HDC&=%HDC
endif
a&=@external("GDI32.DLL","GetCurrentObject",HDC&,6) '6=~obj_font
return a&
ENDPROC 'GetGrafikFont
PROC SetGrafikFont
parameters hF%,HDC& 'hF% peux pas 0 pour Systemfont son, mais naturellement un avec GetSystemFont ermitteltes Handle. avec cette Funktion peux on »usefont hF%« realisieren, quoi Profan pas peux (chez usefont muss toujours dur qui Schriftartspezifikation angegeben volonté).
declare a&,pc&
pc&=%PCount
si pc&=1
HDC&=%HDC
endif
a&=@external("GDI32.DLL","SelectObject",HDC&,hF%)
return a&
ENDPROC 'SetGrafikFont
PROC GetDrawStringLenX 'ermittelt qui horizontale Ausdehnung de TrueType-Text
parameters s$
declare b#,ret&
dim b#,8
si @external("GDI32.DLL","GetTextExtentPoint32A",%HDC,@addr(s$),@len(s$),b#)=1
ret&=@long(b#,0)
d'autre
ret&=0
endif
dispose b#
return ret&
ENDPROC 'GetDrawStringLen
PROC GetDrawStringLenY 'ermittelt qui vertikale Ausdehnung de TrueType-Text
parameters s$
declare b#,ret&
dim b#,8
si @external("GDI32.DLL","GetTextExtentPoint32A",%HDC,@addr(s$),@len(s$),b#)=1
ret&=@long(b#,4)
d'autre
ret&=0
endif
dispose b#
return ret&
ENDPROC 'GetDrawStringLen
PROC GetAbsWindowPosX1 'ermittelt qui linke obere absolute Fensterposition
parameters hW&
declare b#,ret&
dim b#,4*4
@external("user32.dll","GetWindowRect",hW&,b#)
ret&=@long(b#,0)
dispose b#
return ret&
ENDPROC 'GetAbsWindowPosX1
PROC GetAbsWindowPosY1
parameters hW&
declare b#,ret&
dim b#,4*4
@external("user32.dll","GetWindowRect",hW&,b#)
ret&=@long(b#,4)
dispose b#
return ret&
ENDPROC 'GetAbsWindowPosY1
PROC GetAbsWindowPosX2
'Es wird qui absolute Position ermittelt! Pour Breite/Hauteur GetWindowSpan verwenden!
parameters hW&
declare b#,ret&
dim b#,4*4
@external("user32.dll","GetWindowRect",hW&,b#)
ret&=@long(b#,8)
dispose b#
return ret&
ENDPROC 'GetAbsWindowPosX2
PROC GetAbsWindowPosY2
'Es wird qui absolute Position ermittelt! Pour Breite/Hauteur GetWindowSpan verwenden!
parameters hW&
declare b#,ret&
dim b#,4*4
@external("user32.dll","GetWindowRect",hW&,b#)
ret&=@long(b#,12)
dispose b#
return ret&
ENDPROC 'GetAbsWindowPosY2
PROC GetWindowThinBorderWidth
declare erg&
erg&=@external("user32.dll","GetSystemMetrics",7) '~SM_CXFIXEDFRAME=7
return erg&
ENDPROC 'GetWindowThinBorderWidth
PROC GetDialogFont 'gibt un Handle zur aktuell gesetzten DialogFont zurück (0, si le Systemschriftart eingestellt ist)
declare dummycontrol%,hF%
dummycontrol%=@create("TEXT",%HWnd,"",0,0,0,0)
hF%=@sendmessage(dummycontrol%,49,0,0) '49=~wm_getfont
@destroywindow(dummycontrol%)
return hF%
ENDPROC 'GetDialogFont
PROC ClearKeyboardBuffer
tandis que @inkey$()<>""
endwhile
ENDPROC 'ClearKeyboardBuffer
PROC MouseAbsX 'absolute x-Mausposition
Déclarer Point#,XX&
Faible Point#,8
@external("user32.dll","GetCursorPos",Point#)
XX&=@long(Point#,0)
Dispose Point#
Retour XX&
ENDPROC 'MouseX
PROC MouseAbsY 'absolute y-Mausposition
Déclarer Point#,YY&
Faible Point#,8
@external("user32.dll","GetCursorPos",Point#)
YY&=@long(Point#,4)
Dispose Point#
Retour YY&
ENDPROC 'MouseY
'}


'Hauptprogramm:
cls
dim ab#,S_ACTIONBOX
'{ 'simple ActionBox avec entier wenig Programmieraufwand
ab#.text$="ca ist une entier simple Actionbox avec seulement einem Button.\n\nSie nécessaire seulement une définition, nämlich den anzuzeigenden Text."
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'Actionbox avec trois benutzerdefinierten Buttons
ActionBoxReset(ab#) 'mets alle Werte sur Standard zurück
ab#.text$="cet ActionBox hat trois Buttons, en Text libre gewählt volonté peux.\n\nDer Rückgabewert ist qui geklickte Button ou bien 0 im piège de Esc. ou bien la fenêtre schließen (\qX\q à droite dessus)."
ab#.AnzButtons&=3
ab#.ButtonTexts$="Button 1|Button 2|Button 3"
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'Actionbox avec trois benutzerdefinierten Buttons, einer definierten Titelzeile et einem definierten Icon
ActionBoxReset(ab#)
ab#.Caption$="eigene Überschrift"
ab#.text$="cet ActionBox hat erneut trois Buttons, diesmal une definierte Titelzeile et un definiertes Icon, welches vom Standard-Windowston begleitet wird.\n\nDies ist bewusst même chose Icon, cela chez den bisherigen ActionBoxes verwendet wurde. Allerdings wird diesmal qui passende Sound en supplément gespielt, weil cela Icon explizit gesetzt wurde."
ab#.AnzButtons&=3
ab#.ButtonTexts$="Button 1|Button 2|Button 3"
ab#.Icon&=1
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'nochmal avec anderem Icon
ActionBoxReset(ab#)
ab#.Caption$="eigene Überschrift"
ab#.text$="même chose nochmal, seulement avec anderem Icon.\n\nEs gibt six en (statt qui aus Profan bekannten quatre):\n- .Icon&=1: \qi\q\n- .Icon&=2: \q?\q (sans Ton, Windows hat pour keinen (plus))\n- .Icon&=3: \q!\q\n- .Icon&=4: \qX\q\n- .Icon&=5: Security Shield\n- .Icon&=6: Programme-Icon\n\n\
il y a dans cette ActionBox maintenant aussi une vom ersten abweichenden Default-Button.\n\n\
on ist incidemment pas à qui Windows-Sounds attaché, mais peux, si on voudrais, une völlig libre wählbaren Sound beim Öffnen qui ActionBox abspielen (aus einer beliebigen WAV-Dossier)."
ab#.AnzButtons&=3
ab#.ButtonTexts$="Button 1|Button 2|Button 3"
ab#.DefButton&=2
ab#.Icon&=3
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'avec très langem Text, qui gescrollt wird
ActionBoxReset(ab#)
ab#.Caption$="ActionBox avec scrollbarem Text"
ab#.text$="ici gibt es très viel Text. Anstatt qui Box toujours größer trop faire, comment Windows es 1faire serait, gibt es ici une Maximalgröße, ab qui qui Text scrollbar gemacht wird. cela Textfeld ist standardmäßig maximum 500 Pixel hoch, c'est mais naturellement einstellbar.\n\nHier wird \
diesmal cela neue Security Shield-Icon de Windows verwendet. très brauchbar z.B. pour qui annonce, dass une Mot de passe-Abfrage fehlgeschlagen ist.\n\n\
Es était trop merken, dass qui Berechnung qui Zeilenumbrüche une fühlbare Zeit gedauert hat (jusqu'à qui ActionBox angezeigt wurde). je pourrait naturellement une DLL écrivons, qui cela plus rapide erledigt, mais aujourd'hui dachte je, dass reines XProfan sans Schnickschnack et weitere \
Fichiers aussi la fois wieder entier entspannend pour alle wäre. ;-)\n\n\
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text.\n\nUngefähr zur Moitié là.\n\n \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text.\n\nUnten arrivé!"
ab#.AnzButtons&=3
ab#.ButtonTexts$="Button 1|Button 2|Button 3"
ab#.DefButton&=2
ab#.Icon&=5
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'ausgewählte Buttons volonté seulement anklickbar, si on den Text jusqu'à pour unten gescrollt hat
ActionBoxReset(ab#)
ab#.Caption$="ActionBox avec scrollbarem Text et zunächst deaktivierten Buttons"
ab#.text$="Diesmal ist qui 3. Button zunächst deaktiviert. seulement ensuite, si qui Benutzer den Text entier pour unten gescrollt (et hoffentlich gelesen) hat, wird cette Button aktiviert. So ist z.B. une Lizenzvereinbarung avant Aktivierung des Installationsbuttons entier léger trop realisieren.\n\n\
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text.\n\nUngefähr zur Moitié là.\n\n \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. \
entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text. entier viel Text.\n\nUnten arrivé. qui installation peux eh bien gestartet volonté."
ab#.AnzButtons&=3
ab#.ButtonTexts$="Zurück|Abbruch|Installieren"
ab#.DefButton&=2
ab#.DeactivateButtonsTillLastLineSeen%=4 'qui zunächst deaktivierten Buttons volonté bitweise transfert (Button 1=1, Button 2=2, Button 3=4, Button 4=8 usw.)
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'Fehlermeldungs-ActionBox avec rotem Hintergrund et großer Schrift
ActionBoxReset(ab#)
ab#.Caption$="Fehlermeldungs-ActionBox avec rotem Hintergrund et großer Schrift"
ab#.text$="FEHLER!\n\nDie Dossier Blablub.dll wurde pas trouvé. ses sélection:"
ab#.AnzButtons&=3
ab#.ButtonTexts$="Wiederholen|Übergehen|Abbrechen"
ab#.DefButton&=3
ab#.hFont&=@create("Font","Arial",20,0,1,0,0)
ab#.TextColor&=@rgb(255,255,255)
ab#.BkColor&=@rgb(200,0,0)
ab#.Icon&=4
imprimer "Button: "+@str$(@actionbox(ab#))
DeleteObject ab#.hFont&
'}
'{ 'Fehlermeldungs-ActionBox avec Aider-Button
ActionBoxReset(ab#)
ab#.Caption$="Fehlermeldungs-ActionBox avec rotem Hintergrund et Aider-Button"
ab#.text$="eh bien gibt es une zusätzlichen Aider-Button. ca est un spezieller Button, qui une benutzerdefinierte Funktion aufruft, dans qui on alles anstellen peux, quoi on voudrais, um weitere Hilfestellung trop einer annonce trop leisten.\n\nBei qui Standard-MessageBox wird demgegenüber lediglich \
une ~WM_HELP-Message gesendet, qui on malheureusement pas Travailler peux, au cours de qui MessageBox cela System blockiert.\n\n\nFEHLER!\n\nDie Dossier Blablub.dll wurde pas trouvé. ses sélection:"
ab#.AnzButtons&=3 'Es bleibt chez 3 selbst definierten Buttons! qui Aider-Button wird automatisch hinzugefügt.
ab#.HelpButton&=1 'qui Aider-Button wird aktiviert.
ab#.pHelpProc&=@ProcAddr("pHelpProc",1) 'qui Einsprung-Adresse pour qui benutzerdefinierte Aider-Procédure wird défini.
ab#.HelpProcParam&=0 'peux irgendein selbst gewählter paramètre son.
ab#.ButtonTexts$="Wiederholen|Übergehen|Abbrechen|HILF MIR!!!" 'qui Text pour den Aider-Button peux cependant comme dernier Text hinzugefügt volonté. Anderenfalls wird "Aider" benutzt.
ab#.DefButton&=3
ab#.TextColor&=@rgb(255,255,255)
ab#.BkColor&=@rgb(200,0,0)
ab#.Icon&=4
imprimer "Button: "+@str$(@actionbox(ab#))
@ProcAddr("pHelpProc",-1) 'qui ProcAddr wieder freigeben, weil on peut-être encore autre im Programme verwenden voudrais (je Parameterzahl gibt es seulement 5 freie Plätze)
'}
'{ 'XMessageBoxen
ActionBoxReset(ab#)
ab#.Caption$="XMessageBoxen"
ab#.text$="Um bisher bestehenden Code léger à ActionBoxen anpassen trop peut, gibt es qui Procédure »XMessageBox«. cet appelez interne une ActionBox sur, mais so, dass on dieselben trois paramètre comment chez qui Standard-XProfan-MessageBox verwenden peux et aussi dieselben Rückgabewerte erhält. \
on muss seulement »MessageBox« im Code par »XMessageBox« ersetzen. avec dem Füllen de Werten dans qui Struktur qui ActionBox-Bereichsvariable muss on sich dabei alors pas beschäftigen.\n\n\
cet Funktion ist naturellement sur qui Standard-Buttontexte et -Rückgabewerte beschränkt. mais il peut avec cinq globalen Variablen immerhin qui Text- et Hintergrundfarbe sowie qui Schriftart libre choisir. aussi qui libre programmierbare Hilfeprozedur wird soutenu.\n\n\
si on alle MessageBoxen dans einem Programme z.B. avec einem sanften lindgrün comment dans cette Box unterlegt, hebt on sich déjà einmal gewaltig de presque allen anderen Programmen ab.\n\n\
Aider findet sich trop Beginn qui Procédure comme Kommentare.\n\n\
chez cette ActionBox wurde incidemment qui normale Windows-Standard-Beep comme Sound gewählt. cette Klang est un anderer comme qui Standardton pour cela aktuell gewählte Icon."
ab#.BkColor&=@rgb(200,220,100)
ab#.Icon&=1
ab#.Sound&=15
imprimer "Button: "+@str$(@actionbox(ab#))
'}
'{ 'zum Schluss encore une avertissement (seulement une ActionBox zur Zeit)
ActionBoxReset(ab#)
ab#.Caption$="avertissement et Ende des Tutoriels"
ab#.text$="Zum Schluss encore une avertissement:\n\nEs darf toujours seulement une ActionBox zur Zeit donner, sonst gibt es Variablenkonflikte. c'est im Normalfall überhaupt ne...aucune Problem. mais dans qui Subclassproc sollte on qui ActionBox vorsichtshalber wohl lieber pas benutzen.\n\n\
eh bien mais viel Amusement avec den neuen Opportunités! qui qui ActionBox benutzen voudrais, packt sich qui Struktur- et Variablendeklarationen sowie qui Prozeduren am besten dans un INC-Dossier. ici habe je alles hintereinander weg geschrieben, avec cela un einziger \
Sourcecode pour qui Veröffentlichung reicht.\n\nBeste Grüße, Jens-Arne\n\nAnregungen et Hinweise: jreumsc@web.de"
ab#.BkColor&=@rgb(255,255,0)
ab#.Icon&=3
imprimer "Button: "+@str$(@actionbox(ab#))
'}
imprimer:imprimer "Zum finissons bouton drücken ou bien Mausklick."
dispose ab#
waitinput
end
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
26.02.2023  
 




Manfred
Barei
Super!!
 
XProfan X2
Zu wenig Wissen ist gefärlich, zu viel auch.(XProfan X4) | Win 10 Pro 64 | Win7 Ultimate 32/64 | AMD FX-8320, 16GB, GeForce GT 630 |
08.03.2023  
 




Georg
Teles
 
Alle Sprachen
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

16.03.2023  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.472 Views

Untitledvor 0 min.
RudiB. vor 11 Tagen
E.T.23.02.2025
Gast.081524.07.2024
Matzbub03.02.2024
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie