Français
Forum

Erledigt: deux Bilderprobleme

 

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?
 
Nico Madysa
15.07.2009  
 



Weil Windowss L'assurance-chômage passif (asynchon) zeichnet.

Machs doch comment dans Bomb 3¾ : [...] 
 
15.07.2009  
 




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.
 
16.07.2009  
 




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
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
16.07.2009  
 



Nico Madysa, Beitrag=53263, Zeitpunkt=16.07.2009
@iF: "Asynchron, schreib cela maintenant hundertmal à qui table!




Zum Thema: oui c'est ca, qui L'assurance-chômage hat plusieurs "Pässe", alles pour moins charge.

qui Frage GT. PicButton/Button habe je pas kappiert.
 
16.07.2009  
 




Nico
Madysa
ensuite fais doch la fois folgendes:
Enkommentiere qui beiden Zeilen
KompilierenMarqueSéparation
SavePic "D:\Dat1.bmp",PLsg&
SavePic "D:\Dat2.bmp",SendMessage(hBack&,~STM_GETIMAGE,0,0)e>

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.
 
Nico Madysa
16.07.2009  
 



Könntest Du cela einmal avec einem 3 Zeiler manifester?
 
16.07.2009  
 




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
16.07.2009  
 




Nico
Madysa
Bitteschön, je hoffe, dass dreiunzwanzig Zeilen pas zuviel sommes.
KompilierenMarqueSéparation
cls 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.
 
Nico Madysa
16.07.2009  
 



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...
 
16.07.2009  
 



Nachtrag: Ähnlich: [...]  .
 
16.07.2009  
 




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.296 Views

Untitledvor 0 min.
Langer18.12.2021
H.Brill05.01.2019
AndreasS27.12.2018
E.T.20.12.2018
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