Español
Foro

Hecho: Zwei Bilderprobleme

 

Nico
Madysa
¡Hola miteinander!

Yo habe mein Programa veces el Minimum reduziert, en el lo siempre todavía zwei merkwürdige Erscheinungen son:
KompilierenMarcaSeparación
 $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

Lo se folgendes gemacht: Zu Beginn voluntad en el Matrix feld% vier zufällig gewählte Werte en 1 gesetzt (Mi Murmeln, siehe más unten ). Das Staticcontrol, el en el Hintergrund liegt, se de Buttons überdeckt.
Klickt uno nun en el Button unten links (con el Handle But&[0,9]), así voluntad el Randbuttons deaktiviert y el mittleren versteckt. Damit se el essenzielle Teil el Hintergrundbitmap sichtbar.
Darauf voluntad vier Kullern de feld% hingemalt. Das todo Ventana se en uno Mapa de bits abgesichert y Hintergrundbitmap transferencia, el Status quo se also fixiert. Zum Schluss voluntad el deaktivierten Randbuttons unsichtbar gemacht, sólo el Ecken y el Hintergrundbild verbleiben. (Der untere rechte Button final el Programa.)

Problema 1: Im Kompilat fehlen de los vier Murmeln meist algunos. Im Interpreter voluntad stets todos vier adecuado. Wenn el Línea SetTimer 1 : waitinput : KillTimer (Dulcoif) aktiviert se, voluntad auch en el Kompilat todos Kullern adecuado. Sleep zeitigt no Wirkung. Findet lo en getrennten Schleifen en lugar de, dass el Buttons lejos y el Kreise gemalt voluntad, así voluntad ebenso todos vier Kreise adecuado. Doch por qué funktioniert el obere Variante no? Ein Zeitproblem kann no ser, como Sleep nichts bringt.

Problema 2: Man ersetze el Aufruf Button(&loop,y%) por Button_2(&loop,y%). Dadurch es una einziger el Randbuttons bildlos, pero una Standard-Button. Dies ha el unerklärlichen Effekt, dass el Hintergrundbitmap sólo todavía de uno schwarzen Fläche y el Button besteht. Wers no glaubt, kann el Bilder absichern dejar. Das Fensterfoto &SCRBMP es todavía ordentlich, doch el Mapa de bits des Static-Controls es más que fraglich. Doch por qué?
 
Nico Madysa
15.07.2009  
 



Weil Windowss UI passiv (asynchon) características.

Machs doch como en Bomb 3¾ : [...] 
 
15.07.2009  
 




Jörg
Sellmeyer
Hast Usted ya veces una Repaint zwischendurch ausprobiert?
En me kommt auch igual el Meldung, daß STM_SETIMAGE en el Encabezamiento-Expediente fehlt.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
15.07.2009  
 



Wobei Yo persönlich en así kleinem Spielfeld rein en una hPic (oder membmp) trabajo sería, o. en 2 (oder mehr...) wobei el Zweite z.B. una Klickmaske wäre.
 
16.07.2009  
 




Nico
Madysa
@Jörg: Es bien posible, Yo mi Messages.ph algunos Male erweitert (y vergesse el siempre otra vez. ) STM_SETIMAGE ha el Nummer $0172, STM_GETIMAGE ha el Nummer $0173. El Parámetro, etc. son como en BM_SETIMAGE o. BM_GETIMAGE.
Repaint en el Bucle ha sólo una elendes Flackern bereitet, doch dein Tipp ha mich en el richtige Fährte gelockt. Hiermit klappts:
KompilierenMarcaSeparación
Anstatt obenauf a krakeln gehe Yo direkt en el Mapa de bits des Statics y fordere lo después de el Doppelschleife en, dies a Kenntnis a nehmen.

@IF: "Asynchron, schreib el ahora hundertmal a el Tafel!
Yo gehe simplemente veces su de, dass con deinem Rätselwort gemeint es, dass DrawPic mi Murmeln no inmediatamente en Befehl hinmalt, pero se sólo una vez "anstellen" muss (wo De todos modos) -- y el Bild entonces manchmal überzeichnet se, si endlich dran es. Richtig?

Damit restos sólo todavía el seltsame Comportamiento des Statics übrig, si uno el Buttons kein Picbutton es. Sombrero wer una Concepto? Un Adressen-Schutzverletzung debería diesmal no (ya otra vez) vorliegen.
 
Nico Madysa
16.07.2009  
 



Nico Madysa, Beitrag=53263, Zeitpunkt=16.07.2009
@IF: "Asynchron, schreib el ahora hundertmal a el Tafel!




Zum Thema: Exactamente, el UI ha mehrere "Pässe", alles para weniger Last.

El Cuestión ca. PicButton/Button Yo no kappiert.
 
16.07.2009  
 




Nico
Madysa
Dann mache doch veces folgendes:
Enkommentiere el beiden Zeilen
KompilierenMarcaSeparación
SavePic "D:\Dat1.bmp",PLsg&
SavePic "D:\Dat2.bmp",SendMessage(hBack&,~STM_GETIMAGE,0,0)e>

y passe eventuell el Pfade a. Dann kommentierst du el Línea Button(&loop,y%) de y aktivierst dafür el darunter liegende Línea Button_2(&loop,y%). Dann lässt Si es usted el Programa como ya zuvor durchlaufen y du wirst determinar, dass Dat1.bmp y Dat2.bmp se unterscheiden voluntad, obwohl ellos el theoretisch no debería.
Lo wäre natürlich todavía schöner, si dieser Fehler sólo en me aufträte.
 
Nico Madysa
16.07.2009  
 



Könntest Usted el una vez con un 3 Zeiler demonstrieren?
 
16.07.2009  
 




Nico
Madysa
Nein, por desgracia, no. Selección aleatoria, Ventana, end: ya son drei Zeilen weg.
Aber como el Sache con el Murmeln geklärt es, schaue Yo veces, si la Ding todavía más kürzen lässt ...
 
Nico Madysa
16.07.2009  
 




Nico
Madysa
Bitteschön, Yo hoffe, dass dreiunzwanzig Zeilen no zuviel son.
KompilierenMarcaSeparación
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

Der Fehler tritt en, sobald auch sólo una einziger normaler Button en el Bildschirm sichtbar es. Sind zwei Picbuttons como, así se ejecuta alles normal. Wenn el Textbutton vorher versteckt se, funktioniert ebenfalls alles wunderbar.
 
Nico Madysa
16.07.2009  
 



Achso ahora verstehe Yo Su Problema, sí el es "normal".

Windows blanco no welche Pixel hinter* una Control mentira, Yo hatte veces con Franco darüber debattiert aber finde el hilo no mehr.

Im Fazit es scrbmp (natürlich) "unzuverlässig". ^ ^

Ziehe veces calc.exe encima Su hWnd y kopiere el hWnd de, calc es con en!

DCs son nunmal no Pixelspeicher.

Vlt. es dies con "AERO" ahora (algo) anders...
 
16.07.2009  
 



Apéndice: Ähnlich: [...]  .
 
16.07.2009  
 




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

2.316 Views

Untitledvor 0 min.
Langer18.12.2021
H.Brill05.01.2019
AndreasS27.12.2018
E.T.20.12.2018
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie