| |
|
|
| Bitmaps flickern leider (XP,Vista,7) wenn man diesen so ein neues hPic zuweisen möchte: KompilierenMarkierenSeparierenCLS
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.
Nachtrag: Siehe Canvas.Inc: [...] |
|
|
| |
|
|
|
| Es ist mir nun endlich gelungen das auch mal zu kompilieren: [...]
Was man sieht ist ein "flickerndes" Bitmap. |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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] |
|
|
| |
|
|
|
| Hab das mal als Include canvas.inc ( [...] ) verpackt -
in dieser Form hilft es mir persönlich am meisten. |
|
|
| |
|
|
|
| @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". |
|
|
| |
|
|
|
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. ^^ |
|
|
| |
|
|