Forum | | | | Nico Madysa | allô miteinander!
j'ai mon Programme la fois sur cela Minimum reduziert, chez dem es toujours deux merkwürdige Erscheinungen gibt: KompilierenMarqueSéparation $H Messages.ph
proc Zeige_Kugeln
declare ly% , gueltig%
alle Buttons durchgehen
whileloop 0,9
ly% = &loop
whileloop 0,9
if xor(not(&loop mod 9),not(ly% mod 9)) or (not(&loop) and (ly% = 9))
Rand deaktivieren
EnableWindow But&[&loop,ly%],0
elseif (&loop mod 9) and (ly% mod 9)
Mittelfeld aufdecken
ShowWindow(But&[&loop,ly%],0)
endif
Die Kullern anzeigen
if between(&loop,1,8,ly%,1,8)
SetTimer 0 : waitinput : KillTimer
if feld%[&loop - 1,ly% - 1]
DrawPic PTrue&,&loop * 48,ly% * 48;-1
endif
endif
EndWhile
EndWhile
Das gemalte ans Hintergrundbild klatschen
PLsg& = Create("hPic",0,"&SCRBMP")
SendMessage(hBack&,~STM_SETIMAGE,0,PLsg&)
SavePic "D:\Dat1.bmp",PLsg&
SavePic "D:\Dat2.bmp",SendMessage(hBack&,~STM_GETIMAGE,0,0)
Zu guter Letzt den deaktivierten Rand wegmachen
whileloop 0,9
ly% = &loop
whileloop 0,9
case xor(not(&loop mod 9),not(ly% mod 9)) : ShowWindow(But&[&loop,ly%],0)
EndWhile
EndWhile
endproc
proc Button
parameters px% , py%
Rand: Bilder, Mitte: normal
ifnot (px% mod 9) and (py% mod 9)
But&[px%,py%] = Create("PicButton",%hWnd,PTrue&,px% * 48,py% * 48,48,48)
else
But&[px%,py%] = Create("Button",%hWnd,"",px% * 48,py% * 48,48,48)
endif
endproc
proc Button_2
parameters px% , py%
nur ein Button am Rande ist kein Bild
if (px% = 0) and (py% = 9)
But&[px%,py%] = Create("Button",%hWnd,"",px% * 48,py% * 48,48,48)
elseif not((px% mod 9) and (py% mod 9))
But&[px%,py%] = Create("PicButton",%hWnd,PTrue&,px% * 48,py% * 48,48,48)
else
But&[px%,py%] = Create("Button",%hWnd,"",px% * 48,py% * 48,48,48)
endif
endproc
proc Bereite_Bilder
Hintergrundbild
PBack& = Create("hNewPic",481,481,$FFFFFF)
StartPaint PBack&
UsePen 0,1,0
whileloop 2,8
Rectangle (48*&loop-1),0 - (48*&loop+1),480
EndWhile
whileloop 2,8
Rectangle 0,(48*&loop-1) - 480,(48*&loop+1)
EndWhile
EndPaint
Bild für die Kullern
PTrue& = Create("hNewPic",48,48,$FFFFFF)
StartPaint PTrue&
UsePen 0,1,0
UseBrush 1,0
Ellipse 2,2,45,45
EndPaint
endproc
proc BuildUp
declare y%
WindowStyle 26
Window 100,50 - 500,520
Hintergrund
hBack& = Create("Bitmap",%hWnd,PBack&,0,0)
alle Buttons
whileloop 0,9
y% = &loop
whileloop 0,9
Button(&loop,y%)
Button_2(&loop,y%)
EndWhile
EndWhile
endproc
proc Platziere_Kugeln
declare rx% , ry%
clear feld%[]
whileloop 4
repeat
rx% = Rnd(8)
ry% = Rnd(8)
until not(feld%[rx%,ry%])
feld%[rx%,ry%] = 1
EndWhile
endproc
declare But&[9,9], feld%[7,7]
declare hBack&,PBack&,PLsg& , PTrue&
Randomize
Bereite_Bilder
BuildUp
Platziere_Kugeln
var e% = 0
whilenot e%
waitinput
if Clicked(But&[9,9])
e% = 1
elseif Clicked(But&[0,9])
Zeige_Kugeln
endif
wend
DeleteObject PBack&
DeleteObject PLsg&
DeleteObject PTrue&
end
Es wird folgendes gemacht: trop Beginn volonté dans qui Matrix champ% quatre zufällig gewählte Werte sur 1 gesetzt (mon Murmeln, siehe plus unten ). cela Staticcontrol, cela im Hintergrund liegt, wird de Buttons überdeckt. Klickt on eh bien sur den Button unten à gauche (avec dem Handle But&[0,9]), so volonté qui Randbuttons deaktiviert et qui mittleren versteckt. avec cela wird qui essenzielle partie qui Hintergrundbitmap sichtbar. puis volonté quatre Kullern aus champ% hingemalt. cela ganze la fenêtre wird dans einer Bitmap abgesichert et qui Hintergrundbitmap transfert, qui Status quo wird alors fixiert. Zum Schluss volonté qui deaktivierten Randbuttons unsichtbar gemacht, seulement qui Ecken et cela Hintergrundbild verbleiben. (qui untere rechte Button finissez cela Programme.)
Problem 1: Im Kompilat manquer de den quatre Murmeln meist quelques. Im Interpreter volonté stets alle quatre angezeigt. si qui la ligne SetTimer 1 : waitinput : KillTimer (Dulcoif) aktiviert wird, volonté aussi im Kompilat alle Kullern angezeigt. Sleep zeitigt aucun Wirkung. Findet es dans getrennten Schleifen statt, dass qui Buttons entfernt et qui Kreise gemalt volonté, so volonté ebenso alle quatre Kreise angezeigt. Doch pourquoi funktioniert qui obere variante pas? un Zeitproblem peux es pas son, là Sleep rien bringt.
Problem 2: on ersetze den Aufruf Button(&loop,y%) par Button_2(&loop,y%). Dadurch est un einziger qui Randbuttons bildlos, mais un Standard-Button. ca hat den unerklärlichen effet, dass qui Hintergrundbitmap seulement encore aus einer schwarzen Surface et dem Button besteht. Wers pas croyez, peux sich qui Bilder absichern laisser. cela Fensterfoto &SCRBMP ist encore réglé, doch qui Bitmap des Static-Controls ist plus que fraglich. Doch pourquoi? |
| | | | |
| | | Weil Windowss L'assurance-chômage passif (asynchon) zeichnet.
Machs doch comment dans Bomb 3¾ : [...] |
| | | | |
| | Jörg Sellmeyer | la hâte Du déjà la fois un Repaint zwischendurch ausprobiert? chez mir venez aussi juste qui annonce, qui STM_SETIMAGE dans qui En-tête-Dossier fehlt. |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 15.07.2009 ▲ |
| |
| | | Wobei je personnelle chez so kleinem Spielfeld rein sur einem hPic (ou bien membmp) travailler serait, bzw. sur 2 (ou bien plus...) wobei cela Zweite z.B. une Klickmaske wäre. |
| | | | |
| | Nico Madysa | @Jörg: ca c'est bien possible, j'ai mon Messages.ph quelques Male erweitert (et vergesse cela toujours wieder. ) STM_SETIMAGE hat qui numéro $0172, STM_GETIMAGE hat qui numéro $0173. qui paramètre, etc. sommes comment chez BM_SETIMAGE bzw. BM_GETIMAGE. Repaint dans qui Boucle hat seulement un elendes Flackern bereitet, doch dein Tipp hat mich sur qui richtige Fährte gelockt. Hiermit klappts: KompilierenMarqueSéparation
proc Zeige_Kugeln
declare ly% , gueltig%
alle Buttons durchgehen
whileloop 0,9
ly% = &loop
whileloop 0,9
if xor(not(&loop mod 9),not(ly% mod 9)) or (not(&loop) and (ly% = 9))
Rand deaktivieren
EnableWindow But&[&loop,ly%],0
elseif (&loop mod 9) and (ly% mod 9)
Mittelfeld aufdecken
ShowWindow(But&[&loop,ly%],0)
endif
Die Kullern anzeigen
if between(&loop,1,8,ly%,1,8)
SetTimer 0 : waitinput : KillTimer
if feld%[&loop - 1,ly% - 1]
StartPaint SendMessage(hBack&,~STM_GETIMAGE,0,0)
DrawPic PTrue&,&loop * 48,ly% * 48;-1
EndPaint
endif
endif
EndWhile
EndWhile
Repaint
Das gemalte ans Hintergrundbild klatschen
(damit werden auch die jetzt deaktivierten, dann verschwunden seienden
Randbuttons übernommen)
PLsg& = Create("hPic",0,"&SCRBMP")
SendMessage(hBack&,~STM_SETIMAGE,0,PLsg&)
SavePic "D:\Dat1.bmp",PLsg&
SavePic "D:\Dat2.bmp",SendMessage(hBack&,~STM_GETIMAGE,0,0)
Zu guter Letzt den deaktivierten Rand wegmachen
whileloop 0,9
ly% = &loop
whileloop 0,9
case xor(not(&loop mod 9),not(ly% mod 9)) : ShowWindow(But&[&loop,ly%],0)
EndWhile
EndWhile
f='./../../function-references/XProfan/endproc/'>endproc
Anstatt en dessus de trop krakeln vais je direct dans qui Bitmap des Statics et fordere es pour qui Doppelschleife sur, ca zur Kenntnis trop prendre.
@iF: "Asynchron, schreib cela maintenant hundertmal à qui table! je vais simple la fois en aus, dass avec deinem Rätselwort gemeint ist, dass DrawPic mon Murmeln pas tout de suite chez Befehl hinmalt, mais sich seulement einmal "anstellen" muss (wohin De toute façon) -- et cela Bild ensuite quelquefois überzeichnet wird, si es enfin tour ist. Richtig?
avec cela bleibt seulement encore cela seltsame Verhalten des Statics übrig, si einer qui Buttons ne...aucune Picbutton ist. Hat qui une concept? une Adressen-Schutzverletzung sollte diesmal pas (encore) vorliegen. |
| | | | |
| | | | | | | |
| | Nico Madysa | ensuite fais doch la fois folgendes: Enkommentiere qui beiden Zeilen KompilierenMarqueSéparation et passe eventuell qui Pfade à. ensuite kommentierst du qui la ligne Button(&loop,y%) aus et aktivierst pour qui au-dessous liegende la ligne Button_2(&loop,y%). ensuite peut du cela Programme comment déjà zuvor durchlaufen et du wirst feststellen, dass Dat1.bmp et Dat2.bmp sich unterscheiden volonté, quoique vous cela theoretisch pas devrait. Es wäre naturellement encore plus beau, si cette faute seulement chez mir aufträte. |
| | | | |
| | | Könntest Du cela einmal avec einem 3 Zeiler manifester? |
| | | | |
| | Nico Madysa | non, malheureusement pas. Randomiser, Fenêtre, end: déjà sommes trois Zeilen weg. mais là qui l'affaire avec den Murmeln geklärt ist, schaue je la fois, si sich cela Ding encore plus kürzen peut ... |
| | | | |
| | Nico Madysa | Bitteschön, je hoffe, dass dreiunzwanzig Zeilen pas zuviel sommes. KompilierenMarqueSéparationcls 16777215
P& ist das Bild des Buttons
var P& = Create("hNewPic",48,48,$22DD22)
Die Buttons sind h& und g&. Jeder kann ein Text- oder ein Bildbutton sein.
var h& = Create("Button",%hWnd,"Text",0,0,48,48)
var h& = Create("PicButton",%hWnd,p&,0,0,48,48)
var g& = Create("PicButton",%hWnd,p&,48,0,48,48)
var g& = Create("Button",%hWnd,"Text",48,0,48,48)
Der Fensterinhalt wird fotografiert und nach unten versetzt angezeigt.
var Q& = Create("hPic",0,"&SCRBMP")
cls 0 Damit man Bild und Bildschirm unterscheiden kann.
Create("Bitmap",%hWnd,Q&,0,48)
Rest
whilenot IsKey(27)
waitinput
wend
DeleteObject P&
DeleteObject Q&
end
qui faute tritt sur, sobald aussi seulement un einziger normaler Button sur dem Bildschirm sichtbar ist. sommes deux Picbuttons là, so fonctionne alles normal. si qui Textbutton auparavant versteckt wird, funktioniert également alles wunderbar. |
| | | | |
| | | Achso maintenant verstehe je Dein Problem, oui c'est "normal".
Windows weiss pas quelle Pixel derrière* einem Contrôle liegen, je hatte la fois avec Frank par-dessus debattiert mais finde den Fil pas plus.
Im Fazit ist scrbmp (naturellement) "unzuverlässig". ^ ^
Ziehe la fois calc.exe sur Dein hWnd et kopiere cela hWnd ab, calc ist avec chez!
DCs sommes nunmal aucun Pixelspeicher.
Vlt. ist ca avec "AERO" maintenant (quelque chose) anders... |
| | | | |
| | | Nachtrag: Ähnlich: [...] . |
| | | | |
|
répondreOptions du sujet | 2.296 Views |
Themeninformationencet Thema hat 3 participant: |