| |
|
|
| Leider hab ich wie man unten im Bild sehen kann beim Nutzen folgenden Codes ein Problem beim Copieren mittels BitBlt. Das Problem bezieht sich jedoch nur auf eine einzige Farbe (eine Syscolor) welche von Grau zu Weiß kopiert wird.
Ich bekomme es einfach nicht weg, kann mir jemand helfen?
Hier der Beispiel-Code: KompilierenMarkierenSeparierensettruecolor 1
DEF CreateCompatibleDC(1) !"GDI32","CreateCompatibleDC"
DEF CreateCompatibleBitmap(3) !"GDI32","CreateCompatibleBitmap"
DEF SelectObject(2) !"GDI32","SelectObject"
DEF BitBlt(9) !"GDI32","BitBlt"
DEF DeleteDC(1) !"GDI32","DeleteDC"
def ReleaseDC(2) !"USER32","ReleaseDC"
DEF ASetParent(2) ! "USER32","SetParent","%%","%"
declare memDC&,hMemBitmap&
PROC CreateMemBmp
Parameters mx%,my%
LET memDC& = CreateCompatibleDC(%hdc) DC erstellen
LET hMemBitmap& = CreateCompatibleBitmap(%hdc,mx%,my%) Bitmap erstellen
SelectObject(memDC&,hMemBitmap&) Bitmap in DC selektieren
RETURN memDC&
EndProc
PROC DeleteMemDC
DeleteDC(memDC&)
EndProc
window 300,300 - 300,300
Declare Static&
Static& = Control("STATIC","",1409286414,10,10,200,200,%hwnd,2001,%hinstance)
CreateMemBmp 200,200
startpaint %desktop
BitBlt(memDC&,0,0,200,200,%hdc,0,0,$0C000CA)
endpaint
ASETPARENT(static&,%desktop)
SendMessage(Static&,$172,0,hMemBitmap&)
releasedc(%hdc,memDC&)
DeleteMemDC
showwindow(static&,0)
showwindow(static&,1)
WaitInput
Danke, iF |
|
|
| |
|
|
|
Dennis Schulmeister | Hallo David,
probiere malö die Farbe geringfügig (von z.B. 255 auf 253) zu ändern. Irgendwo in der MSDN habe ich mal gelesen, dass unter gewissen Umständen ganz bestimme Farben in Systemfarben geändert werden. Schau eventuell nochmal die Flags von BitBlt an.
Saluto, Dennis |
|
|
| (Fast) alle Profan²-Versionen seit Version 2.6, sowie (fast) alle Windows-Versionen seit Windows 3.1 | 04.09.2004 ▲ |
|
|
|
|
| ich glaube hier ists anders herum, auch wenn mein Bild leider falschherum ist. Das grau wird zu weiß.
PS: an den Flags liegt es auch nicht.
Bis denne, iF |
|
|
| |
|
|
|
| Hallo IF...
Testbericht: Der Fehler tritt weder unter Windows95, noch unter Windows98 und auch nicht unter Windows2000 auf - also XP spezifisches Problem. Versuch (nur so zum Divertimento) mal folgendes: -Profaneditor in die recht untere Bildecke schieben -anderes Programm maximieren -auf Profaneditor den Focus seten (Fenster das kopiert wird soll deaktiviert sein) -dein Testprogramm starten
Gibts dann immer noch eine Farbverschiebung oder ist dann alles normal? Hab leider kein XP... |
|
|
| |
|
|
|
| Noch ne Idee, kanns leider nicht testen... KompilierenMarkierenSeparierensettruecolor 1
DEF CreateCompatibleDC(1) !"GDI32","CreateCompatibleDC"
DEF CreateCompatibleBitmap(3) !"GDI32","CreateCompatibleBitmap"
DEF SelectObject(2) !"GDI32","SelectObject"
DEF BitBlt(9) !"GDI32","BitBlt"
DEF DeleteDC(1) !"GDI32","DeleteDC"
def ReleaseDC(2) !"USER32","ReleaseDC"
DEF ASetParent(2) ! "USER32","SetParent","%%","%"
declare memDC&,hMemBitmap&
PROC CreateMemBmp
Parameters mx%,my%
LET memDC& = CreateCompatibleDC(%hdc) DC erstellen
LET hMemBitmap& = CreateCompatibleBitmap(%hdc,mx%,my%) Bitmap erstellen
SelectObject(memDC&,hMemBitmap&) Bitmap in DC selektieren
RETURN memDC&
EndProc
PROC DeleteMemDC
DeleteDC(memDC&)
EndProc
window 300,300 - 300,300
Sleep 1000
Declare Static&
Static& = Control("STATIC","",1409286414,10,10,200,200,%hwnd,2001,%hinstance)
CreateMemBmp 200,200
startpaint %desktop
BitBlt(memDC&,0,0,200,200,%hdc,0,0,$0C000CA)
endpaint
ASETPARENT(static&,%desktop)
SendMessage(Static&,$172,0,hMemBitmap&)
releasedc(%hdc,memDC&)
DeleteMemDC
showwindow(static&,0)
showwindow(static&,1)
WaitInput
|
|
|
| |
|
|
|
| Hmpf, egal wie, egal welches Beispiel, egal wo der Focus,- immer das Selbe.
Es wird schon so sein wie Sebastian es angedeutet hatte,- (%desktop & static & bitblit) <-- irgendwas passiert da was einen unerfindlichen Grund hat.
Aber danke & salve,- iF |
|
|
| |
|
|
|
| Hallo IF...
Wie gesagt - unter Windows2000 und allen anderen Betriebssystemen die mir zur Verfügung stehen corre dein Quellcode - das Problem scheint also speziell bei XP zu liegen. Da sich beim Focuswechsel in der Titelzeile eines Fensters genau der selbe Farbwechsel abspielt, wars wohl den Versuch wert... |
|
|
| |
|
|
|
Dennis Schulmeister | Also das von Andreas beschriebene Verhalten kenne ich irgendwie von wo ganz anders her. Nämlich von meinem guten alten 486er Laptop. Der kennt nämlich nur 256 Farben und Windows 3.1. Wenn ich dort einer anderen Anwendung den Fokus gebe, macht diese Anwendung ihre höchst eigene Farbpalette zur Systempalette. Das hat den Vorteil dass man in Grafikanwendungen noch halbwegs vernünftig arbeiten kann aber die anderen Anwendungen im Hintergrund schauen dadurch je nach Palette immer lustiger aus. Ich nehme an, dass die späteren Windowsversionen sich bei 256 Farben immer noch so verhalten.
Kann es sein, dass du mit einem 256-farb DC arbeitest, iF? Im Gegensatz zu 24bit-Farben enthält ein 256-farb DIB/DC oder was auch immer eine eigene Palette und bezieht sich im eigentlichen Datenbereich nur auf diese Palette. Ein 24-bit DIB/DC/... bezieht sich dabei auf keine Palette sondern besteht aus reinen R-G-B-Trippeln.
War nur so eine (unwahrscheinliche) Idee...
Saluto, Dennis |
|
|
| (Fast) alle Profan²-Versionen seit Version 2.6, sowie (fast) alle Windows-Versionen seit Windows 3.1 | 05.09.2004 ▲ |
|
|
|
|
| Hallo Dennis...
Das war nicht ganz das, was ich meinte. Wie gesagt - auf allen meinen Rechnern corre das Programm ohne Probleme - hab bloß kein XP. Die gleiche Farbänderung sehe ich aber, wenn eine Anwendung vom nichtaktiven in den aktiven Zustand übergeht - nämlich in der Schrift des Fenstertitels. Da es sich wohl nicht um ein normales Windowsverhalten sondern eher um einen Fehler in XP handelt, potuto ich es mir als Windowslaie gut vorstellen, das dieses Fehlverhalten in Verbindung mit einem Focuswechsel stehen potuto...
Das von dir beschriebene Verhalten hat mit dem 256 Farben Grafiktreiber zu tun und tritt auch bei den anderen Windowsversionen bei zu geringer Farbtiefe in ähnlicher Art noch auf - aber das war, wie gesagt, nicht mein Thema. |
|
|
| |
|
|
|
| Nene, ich fahr auf 32bit.
iF |
|
|
| |
|
|