| |
|
|
| Hallo Leute,
viel habe ich noch nicht mit Prospeed gemacht und daher kann es sein das meine Frage gelächter auslöst. Man kann ja einem Static Feld ein BMP zuweisen, was man vorher mit LoadImageA eingelesen hat. Der Hintergrund ist, dass man dann schön Scrollen kann ohne sich um den Neuaufbau des Fensters zu kümmern. Nun versuche ich ein Bild was ich vorher mit LoadExtMemory erstellt habe per SendMessage an das Static Feld zu übergeben, was natürlich nicht geht. Gibt es eine Möglichkeit, dass das Static Feld das Bild an nimmt? Oder eine wie ich ein Bild in einem mit CreateWindow erstelltem Fenster, was kleiner als das Bild ist, anzeigen kann und dann mit Scrollbars es verschieben kann?
Viele Grüße Georg |
|
|
| |
|
|
|
| Hallo Georg.
Warum Gelächter ? Du übergibst dem Static, soviel ich weiß, einen Handle auf eine Bitmap. ProSpeeds LoadExt...() gibt dir aber den Handle des HDCs zurück, an den die Bitmap gekoppelt ist. Damit funktioniert SendMessage natürlich nicht. Du müßtest den Handle der Bitmap aus dem HDC erfragen, das geht mittels der API GetCurrentObject():
bitmaphandle&=GetCurrentObject(prospeedhdc&,7) 7 = OBJ_BITMAP
Mit diesem Handle müßte es problemlos funktionieren...
Gruß, Frank |
|
|
| |
|
|
|
| Hallo Frank,
vielen Dank für die Antwort. Leider klapt es noch nicht ganz, man sieht zwar das etwas passiert aber das Bild wird nicht angezeit, siehe Code.
Direkt noch eine andere Frage, wenn die Desktopauflösung aus 16Bit steht und man ein 24Bit Bild anzeigt entstehen natürlich Schlieren. Kann man dies irgendwie umgehen, weil wenn ich es mir in einem Grafikprogramm ansehe wird es richtig angezeigt.
Viele Grüße Georg KompilierenMarkierenSeparieren $I ProSpeed_UseDll.inc
$I Prospeed_Funktionen.inc
DEF GetCurrentObject(2) ! "GDI32","GetCurrentObject"
Declare Bild$,Lenght&,Memory#,BildHDC&,BildHandle&,ExFenster&,BildFenster&
WindowStyle $200 + $8
WINDOW 150,100-800,600
WINDOWTITLE "HauptFenster"
SETTRUECOLOR 1
CLS RGB(212,208,200)
Bild$ = "bild.bmp"
Lenght& = FileSize(Bild$)
Dim Memory#,Lenght&
ReadFileFast(Addr(Bild$),Memory#,0,Lenght&)
BildHDC& = LoadExtMemory(Memory#,Lenght&)
BildHandle& = GetCurrentObject(BildHDC&,$7)
ExFenster& = CreateWindow(%HWND,"Test",50,50,700,500)
BildFenster& = Control("STATIC","",$5000110E,10,10,650,400,ExFenster&,2001,%hinstance)
SendMessage(BildFenster&,$172,0,BildHandle&)
WaitInput
DestroyWindow(ExFenster&)
Dispose Memory#
FreeAllExtBmps()
$I ProSpeed_FreeDll.inc
End
|
|
|
| |
|
|
|
| Hallo,
kannst du mir den Source plus benötigter Dateien zusenden? Dann kann ichs besser testen...
Gruß, Frank |
|
|
| |
|
|
|
| Hallo,
ok, hab den Source modifiziert, sodas er jetzt funktioniert. Für alle anderen Mitleser: Das hab ich Georg geschrieben:
So, hab deinen Code modifiziert. Die Static-Message STM_SETIMAGE funktioniert nur mit Bitmaps, die nicht an einen HDC gekoppelt sind. Das ist manchmal so, und nur M$ weiß warum... Hat mich selber auch schon einige Haare gekostet
Na ja, ich erstelle jetzt eine Pseudobitmap und koppelte sie an den HDC. Freundlicherweise wird unsere Bitmap dadurch ausgekoppelt und das Handle wird zurückgegeben. Wir sparen uns dadurch GetCurrentObject. Am Ende (solange das Static existiert!) wird wieder zurückgekoppelt und die Pseudobitmap gelöscht. So einfach ist das ) KompilierenMarkierenSeparieren $I ProSpeed_UseDll.inc
$I Prospeed_Funktionen.inc
DEF CreateCompatibleBitmap(3) ! "GDI32","CreateCompatibleBitmap"
DEF SelectObject(2) ! "GDI32","SelectObject"
Declare Bild$,Lenght&,Memory#,BildHDC&,ExFenster&,BildFenster&,XBig&,YBig&,x&,y&
WindowStyle $200 + $8
WINDOW 150,100-800,600
WINDOWTITLE "HauptFenster"
SETTRUECOLOR 1
CLS RGB(212,208,200)
Bild$ = "test.jpg"
Lenght& = FileSize(Bild$)
Dim Memory#,Lenght&
ReadFileFast(Addr(Bild$),Memory#,0,Lenght&)
BildHDC& = LoadExtMemory(Memory#,Lenght&)
XBig& = GetBmpWidth(BildHDC&)
YBig& = GetBmpHeight(BildHDC&)
x&=CreateCompatibleBitmap(BildHDC&,100,100) Irgendeine Bitmap erstellen
y&=SelectObject(BildHDC&,x&) und an den HDC koppeln. y&=Vorheriger Bitmaphandle (also unser)
ExFenster& = CreateWindow(%HWND,"Test",50,50,650,650)
BildFenster& = Control("STATIC","",$5000110E,10,10,XBig&,YBig&,ExFenster&,2001,%hinstance)
SendMessage(BildFenster&,$172,0,y&) STM_SETIMAGE
WaitInput
DestroyWindow(ExFenster&)
Dispose Memory#
SelectObject(BildHDC&,y&) Ursprüngliche Bitmap (unsere) wieder einsetzen
DeleteObject x& und die "irgendeine" ordnungsgemäß löschen
FreeAllExtBmps()
$I ProSpeed_FreeDll.inc
End
Gruß, Frank |
|
|
| |
|
|