Deutsch
Forum

LoadExtMemory und Static Feld

 
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
 
24.04.2004  
 



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
 
24.04.2004  
 



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
 
24.04.2004  
 



Hallo,

kannst du mir den Source plus benötigter Dateien zusenden?
Dann kann ichs besser testen...

Gruß, Frank
 
24.04.2004  
 



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
 
24.04.2004  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.783 Betrachtungen

Unbenanntvor 0 min.
funkheld15.01.2022
Uwe Lang07.02.2019
Andreas Koch19.12.2011

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

unbekannt (5x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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