Seite 1 von 1

DrawImage ins Fenster

Verfasst: 08.01.2009 12:12
von stab
Hallo,

wie bekomme ich am schnellsten und einfachsten die gezeichneten Images wieder weg?

( außer Fenster schließen oder PC ausschalten) :-)

Code: Alles auswählen

Procedure jaPBe_CatchPackedImage(ImageNumber.l, *Label) ; Catch packed image [JCalG1] Ex : jaPBe_CatchPackedImage(#Image0, ?Image_Start)
  Protected *Buffer, BufferLen.l, ReturnValue.l
  BufferLen = PeekL(*Label + 2)
  If BufferLen
    *Buffer = AllocateMemory(BufferLen)
    If *Buffer
      If UnpackMemory(*Label, *Buffer)
        ReturnValue = CatchImage(ImageNumber, *Buffer)
      EndIf
      FreeMemory(*Buffer)
    EndIf
  EndIf
  ProcedureReturn ReturnValue
EndProcedure
;  IncludeBinary "gruenesHaekchen.ico" <JCalG1 Packed> [?gruenesHaekchen_ico_Start , ?gruenesHaekchen_ico_End]
;{ Original Size = 1406 bytes ; Packed Size = 338 bytes
DataSection
gruenesHaekchen_ico_Start:
Data.l $057E434A,$846A0000,$23011539,$81202091,$11B40098,$8B002284,$42044150,$8C806119,$0C034134,$57008B0C,$9599AFFB,$56A446C4
Data.l $5B922B42,$734AADA9,$D52BB825,$84AFE895,$D080BA57,$81DC495E,$855EDC50,$6198CB91,$61D02104,$63442268,$79598EDF,$625E6559
Data.l $A3A11976,$E9AA467B,$19E491A7,$742D846A,$74B62A59,$92EB5AB1,$11BE6B05,$91C0B0B9,$4737ED09,$11D31D26,$A021AECC,$474F71B4
Data.l $4759D126,$11D9CA26,$91DAD7D9,$91DFF049,$8478F389,$5113F8B8,$991EBE4E,$AA479E8E,$EF91B75F,$0083B5F0,$2647EEF5,$2647E7F2
Data.l $FC11F7F5,$2602F9EB,$8F25FF99,$FC911F74,$D6EDFD4B,$B07A224D,$7779EFFE,$E4ECDF6E,$68F73423,$399D753D,$EF37DFAA,$E8E7C610
Data.l $6F3F4BCB,$3F1DFB51,$ED8437A2,$DDF6BEB7,$CFA113DD,$373D00A7,$8308E367,$E6FD5CBF,$072BB9E2,$77FB53CF,$F3C3F89E,$A79E3FA4
Data.l $C53CDAFC,$FE8D9E67,$A01AF974,$47C6D8A8,$2E0A7CC0,$B0979785,$897F5C04,$7FE3F431,$D2E3A7E8,$4BE2E963,$00F0A5E3,$000097E1
Data.b $44,$22
gruenesHaekchen_ico_End:
EndDataSection ;}

;  IncludeBinary "rotesKreuzchen.ico" <JCalG1 Packed> [?rotesKreuzchen_ico_Start , ?rotesKreuzchen_ico_End]
;{ Original Size = 1406 bytes ; Packed Size = 454 bytes
DataSection
rotesKreuzchen_ico_Start:
Data.l $057E434A,$FE500000,$23013451,$81202091,$11B40098,$8B002284,$42044150,$8C806119,$0C024134,$7B408B0C,$97E1FFEE,$5FE447EE
Data.l $60502FEA,$103FBFE4,$296F1FAA,$4C233118,$25130918,$8BC5B846,$6351F391,$91487C04,$21269050,$92483C40,$4C49FD91,$6524FE44
Data.l $6793FF84,$1A34BBE4,$468E6F21,$2B94E35C,$1AED5820,$44A5EDC1,$46C67B8C,$46DB436E,$91B74B80,$002159CE,$11B955F2,$846F72ED
Data.l $791CDC79,$6430B7CE,$A0C71E1C,$A473D920,$90CEE237,$00A61950,$34DA6881,$6C3A9C1C,$2481B40C,$4804C475,$8F49035A,$EC7C367B
Data.l $FA111DB6,$CD000C12,$1437DD6B,$84778700,$0388863D,$479FC641,$91E84BE2,$047BDADA,$10F173BB,$047C249B,$943D787D,$7112DEF6
Data.l $47F35F1F,$00878008,$9356FCFB,$F820F7C8,$779B1FAF,$F2017F09,$5F546825,$7DD21FA2,$FA4BBEC9,$F12FFC25,$943CF697,$9DFFEA44
Data.l $FBBC57BD,$AA5E7811,$FB851E3F,$F1D74DCE,$25CCDD43,$F5F6DD19,$49DB5132,$0AEE3860,$2F2FFBF5,$FA1BF95E,$D050C02A,$5909C3DC
Data.l $B038ECFE,$653E3EDC,$E71125DA,$6FC2F481,$8B7F1EF9,$B8DD07A6,$E97D3A27,$0737E044,$1D6293BD,$4FCDAA38,$79CEDBCE,$04FA840E
Data.l $C1F54362,$8D78A111,$FDDC2373,$FDA04067,$50DEE2F1,$3F5F87E7,$B8A06015,$971F1229,$0E021A00,$2F848686,$FA1F8601,$041E3D29
Data.l $F0C18BFB,$06870041,$9060C046,$44A18F06,$4000F9C0
Data.b $24,$22
rotesKreuzchen_ico_End:
EndDataSection ;}

jaPBe_CatchPackedImage(0, ?gruenesHaekchen_ico_Start)
jaPBe_CatchPackedImage(1, ?rotesKreuzchen_ico_Start)

If OpenWindow(0, 100, 100, 500, 300, "PureBasic - Image")
  
 
  Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Repaint
      StartDrawing(WindowOutput(0))
        DrawImage(ImageID(0), 20, 10)
        DrawImage(ImageID(1), 20, 30)
      StopDrawing()

      EndIf
    
  Until EventID = #PB_Event_CloseWindow  
  
EndIf

End   

Danke

Verfasst: 08.01.2009 12:27
von edel
Mit PB eigentlich gar nicht. Du kannst aber ein neu zeichnen erzwingen
in dem du das Fenster z.b. mit ResizeWindow kurz verkleinerst oder was
auch immer. Mit WindowsApi reicht ein InvalidateRect_(windowid(0),0,1).

Verfasst: 08.01.2009 12:52
von stab
Aja, Danke!!!

InvalidateRect_() ist mir da mit den Koordinaten wieder zu kompliziert.
Da werde ich wohl Gadgets verwenden.

Verfasst: 08.01.2009 13:37
von HeX0R

Code: Alles auswählen

BufferLen = PeekL(*Label + 2) 
Ja wie? Im gepackten Paket steht tatsächlich die benötigte Speichermenge zum entpacken mit drin?
Wieso sagt mir das keiner?