Italia
Wünsche und Anregungen

Wunsch: hPic-Display vs. Bitmap

 
Bitmaps flickern leider (XP,Vista,7) wenn man diesen so ein neues hPic zuweisen möchte:
KompilierenMarkierenSeparieren
CLS
var HPIC&=CREATE("hNewPic",100,100,$FF0000)
var HBMP&=CREATE("bitmap",%HWND,HPIC&,10,10)

WHILE 1

    WAITINPUT 10
    SENDMESSAGE(HBMP&,370,0,HPIC&)//stm_setImage

END
/a>

Vlt. potuto man ein Control hPicDisplay erfinden welches selbst ein zugewiesenes (vlt. gwl_userData) hPic zeichnet z.B. bei wm_draw.

Dann potuto man auf so einem Control auch zeichnen.

 
25.04.2010  
 



Es ist mir nun endlich gelungen das auch mal zu kompilieren: [...] 

Was man sieht ist ein "flickerndes" Bitmap.

311 kB
Hochgeladen:21.09.2010
Downloadcounter69
Download
 
21.09.2010  
 




Andreas
Miethe


Kann das auch am Rechner liegen ? Bei mir flackert nichts.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
21.09.2010  
 



Salve!

Jain, das Flackern geschieht auf allen Computern halbwegs gleich bzw. je nach Computer- Geschwindigkeit und Bitmap-Dimensione.

Bei Bitmaps bzw. BitmapStatics in Verbindung mit stm_setImage flackern diese halt "mehr oder weniger" wenn man stm_setImage anwendet - ich potuto mir aber vorstellen das bei "neusten" UI's wie AREO o.ä. das Flackern "weggecached" wird aber das weiß ich nicht.

Meine "Idee" ist ein einfaches Owner-Draw-Static welches halt z.B. bei wm_paint ein HPic zeichnet - dieses würde dann ja von Haus aus nicht flickern wenn man eine Bildänderung anweist.

Vielleicht könntest Du mir mal solch Owner-Draw-Static vormachen - also eines das im FastMode mit eigener WProc ein beliebiges hPic zeichnet - ich schätze ich potuto daraus dann wiederum ein "Control" herstellen und umbauen per den "nicht-Fastmode" per WProc als nProc und Roland potuto dies dann wiederum ziemlich direkt in Delphi umsetzen und direkt per XProfan ein Create("canvas",...) herstellen.
 
21.09.2010  
 




Jörg
Sellmeyer
Bei mir flackerts auch. Windows XP
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.09.2010  
 




Andreas
Miethe


Meinst Du etwas in dieser Art ?

Ich habe das eben mal aus dem Ärmel geschüttelt, daher sind noch feste Werte drin.
Mal sehen, ob ich am Wochenende dazu komme das auszubauen.
KompilierenMarkierenSeparieren
 $H Windows.ph
 $H Structs.ph
 $H Messages.ph
DEF &CAPTUREBLT $40000000
Struct WNDCLASSEX = ~WNDCLASSEX
Struct PS         = ~PAINTSTRUCT
Declare Ende&,CanvasClassname$
WindowTitle "Canvas"
CLS ~GetSysColor(~Color_BTNFACE)
'Klassen Info holen
Var wndc# = New(WNDCLASSEX)
wndc#.cbSize& = SizeOf(wndc#)
~GetClassInfoEx(%hInstance,"STATIC",wndc#)
'alte controlprocadresse speichern
Var OldWndProc& = wndc#.lpfnWndProc&
' neue controlprocadresse setzen
wndc#.lpfnWndProc& = Procaddr("CanvasProc",4)
'neuen Klassennamen setzen
CanvasClassname$ = "PrfCanvas"
wndc#.lpszClassName& = Addr(CanvasClassname$)
wndc#.hInstance& = %hInstance
' Neue Klasse registrieren
~RegisterClassEx(wndc#)
Set("Fastmode",1)
Var Canvas& = ~CreateWindowEx(0,"PrfCanvas","", ~WS_CHILD | ~WS_VISIBLE | ~SS_SUNKEN,10,10,300,300,%hwnd,0,%hInstance,0)

Whilenot Ende&

    Waitinput

Endwhile

End

Proc CanvasProc

    Parameters wnd&,msg&,wparam&,lparam&

    Select msg&

        Caseof ~WM_PAINT

        Var PS# = New(PS)
        Var DC& = ~BeginPaint(wnd&,PS#)
        ~BitBlt(DC&,0,0,298,298,~GetDC(%Desktop),0,0,~SRCCOPY | &CAPTUREBLT)
        ~EndPaint(wnd&,PS#)
        Dispose PS#
        Return 0

    Endselect

    Return ~CallWindowProc(OldWndProc&,wnd&,msg&,wparam&,lparam&)

EndProc

 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
22.09.2010  
 




Andreas
Miethe


Ok, ist schon ausgebaut.

Ob es bei Euch flackert kann ich nicht sagen, bei mir flackert nichts.
KompilierenMarkierenSeparieren
 $H Windows.ph
 $H Structs.ph
 $H Messages.ph
DEF &CAPTUREBLT $40000000
Struct WNDCLASSEX = ~WNDCLASSEX
Struct PS         = ~PAINTSTRUCT
Struct BITMAP     = ~BITMAP
Declare Ende&,CanvasClassname$
WindowTitle "Canvas"
CLS ~GetSysColor(~Color_BTNFACE)
'Klassen Info holen
Var wndc# = New(WNDCLASSEX)
wndc#.cbSize& = SizeOf(wndc#)
~GetClassInfoEx(%hInstance,"STATIC",wndc#)
'alte controlprocadresse speichern
Var OldWndProc& = wndc#.lpfnWndProc&
' neue controlprocadresse setzen
wndc#.lpfnWndProc& = Procaddr("CanvasProc",4)
'neuen Klassennamen setzen
CanvasClassname$ = "PrfCanvas"
wndc#.lpszClassName& = Addr(CanvasClassname$)
wndc#.hInstance& = %hInstance
' Neue Klasse registrieren
~RegisterClassEx(wndc#)
Set("Fastmode",1)
Var Canvas& = ~CreateWindowEx(0,"PrfCanvas","", ~WS_CHILD | ~WS_VISIBLE | ~SS_SUNKEN | ~SS_BITMAP,10,10,0,0,%hwnd,0,%hInstance,0)
var HPIC&=CREATE("hNewPic",100,100,$FF0000)
SendMessage(Canvas&,~STM_SETIMAGE,0,HPIC&)

Whilenot Ende&

    WAITINPUT 10
    Startpaint HPIC&
    TextColor $00FFFF,$FF0000
    Drawtext 10,10,Time$(0)+":"+Left$(Time$(1),2)
    EndPaint
    SENDMESSAGE(Canvas&,370,0,HPIC&)'stm_setImage

Endwhile

End

Proc CanvasProc

    Parameters wnd&,msg&,wparam&,lparam&

    Select msg&

        Caseof ~WM_PAINT

        Var PS# = New(PS)
        Var DC& = ~BeginPaint(wnd&,PS#)
        Var CompDC& = ~CreateCompatibleDC(DC&)
        Var Bmp& = ~SendMessage(wnd&,~STM_GETIMAGE,0,0)
        Var BMP# = New(BITMAP)
        ~GetObject(Bmp&,SizeOf(BMP#),BMP#)
        Var Width& = BMP#.bmwidth&
        var Height& = BMP#.bmHeight&
        ~SelectObject(CompDC&,Bmp&)
        ~ReleaseDC(CompDC&)
        ~BitBlt(DC&,0,0,Width&,Height&,CompDC&,0,0,~SRCCOPY | &CAPTUREBLT)
        ~EndPaint(wnd&,PS#)
        ~DeleteDC(CompDC&)
        Dispose PS#
        Dispose BMP#
        Return 0

        Caseof ~STM_SETIMAGE

        ~InvalidateRect(wnd&,0,0)

    Endselect

    Return ~CallWindowProc(OldWndProc&,wnd&,msg&,wparam&,lparam&)

ss=s4 href='./../../function-references/xprofan/endproc/'>EndProc
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
22.09.2010  
 



Klasse und vielen Dank, per mein Vorhaben sogar schon zu viel - damit kann ich super herstellen was ich meinte!

[offtopic]
Nebenbei bemerkt: Die Zeile Struct WNDCLASSEX = ~WNDCLASSEX lässt XPSE abstürzen weil WNDCLASSEX bereits bekannt _und gleichnamig der Zuweisung - in nächster Version behoben. Abhilfe: Zeile einfach entfernen da Struktur automatisch eingebunden wird wenn necessario.
[/offtopic]
 
22.09.2010  
 



Hab das mal als Include canvas.inc ( [...]  ) verpackt -

in dieser Form hilft es mir persönlich am meisten.
 
22.09.2010  
 



@Roland: Diese Canvassses [...]  sind einfach "super" - noch superer wäre es wenn XProfan diese von Haus aus erzeugen kann und wenn ich mir die Inc anschaue sind es auch nur wenige Zeilen die sich ja ziemlich 1:1 nach Delphi portieren liessen zu einem eingebauten create("canvas".
 
22.09.2010  
 




Andreas
Miethe


Hallo David,

wenn Du das noch per Win98 und ME kompatibel machen willst dann nimm bei Bitblt() den 2.Parameter ()$40000000 bei den Flags raus. . Den hatte ich nur per das erste Beispiel, per das Kopieren des Desktops eingebaut. Damit werden auch "Layered Windows" mit eingefangen. Für normale Bitmaps brauchst Du das ja nicht, und unter Win98 bzw. ME funktioniert die Sache nicht mit dem Flag !

Hast Du schon mal probiert den Code mit Xprofan12 laufen zu lassen ? Bei mir folgt ein Absturz.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
22.09.2010  
 



Das Flag nehme ich raus, drum der Include als V0.0 auch einen Thread verpasst fürs Weiterdranentwickeln oder "Blödsinn" wie bei "$40000000" Herausnehmen. ^^

>> Hast Du schon mal probiert den Code mit Xprofan12 laufen zu lassen ?

Habe ich nicht getestet weil aktueller xpse per neuste XProfan 11 Version ist - Io l' per XProfan 12 erst fertigstellen muss. Ein paar Gründe fallen mir schon ein weshalb eine XProfan 11 "enh" unter XProfan 12 momentan abstürzen potuto. ^^
 
22.09.2010  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

7.296 Views

Untitledvor 0 min.
Rainer Hoefs02.07.2015
Ernst07.05.2014
Julian Schmidt16.07.2013
Axel Berse20.02.2013
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie