Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 242814 (4250)
  Suchen
 Zurück zur Übersicht
 AutorThema: JPEG laden...
Mario Donick
Datum:22.07.02 22:03 Antwortenals Email verschicken (mariodonick@yahoo.de) 


' Ein Problem
'
' Hallo! Ich habe ein Problem, das nur mit der 5.0-Runtime auftritt,
' aber nicht mit dem Interpreter.
'
' Profanversion : Profan² 5.0b-NT (die neue Freeware-Version)
' ProSpeed-Version: 2.4
' Betriebssystem : Win98
'
' Das Problem ist in der Prozedur LoadPicture beschrieben.
' Wäre schön, wenn Ihr das mal ausprobiert, mir sagt, ob das mit
' Versionen über 5.0b-NT auch auftritt, ob ich vielleicht was falsch
' gemacht hab (eigentlich nicht, denn im Interpreter klappt es, nur
' mit der Runtime nicht...) oder ob das ein bekannter oder unbekannter
' Fehler ist.
'
' In einem Dateidialog muss eine JPEG-Datei gewählt werden, die wird
' dann mit Hilfe von ProSpeed angezeigt. Dann genügt es, die Fenster-
' größe zu verändern und das Problem wird offenbar... *seufz* :-(

$O+

Def GetBmpWidth(1) !"PROSPEED", "GetBmpWidth"
Def GetBmpHeight(1) !"PROSPEED", "GetBmpHeight"
Def FreeExtBmp(1) !"PROSPEED", "FreeExtBmp"
Def LoadExtImage(1) !"PROSPEED", "LoadExtImage"
Def CopyExtBmp(9) !"PROSPEED", "CopyExtBmp"
Def FreeLibrary(1) !"KERNEL32", "FreeLibrary"

Declare PicName#, i%, Datei$

' *** Prozedur die mit ProSpeed ein Bild lädt ***

Proc LoadPicture
Parameters FileName$, x%, y%, m%
Declare ExHDC&, ProSpeed&, PicWidth%, PicHeight%

' DLL laden
Let ProSpeed& = UseDLL ("PROSPEED.DLL")

' Grafik in Speicher laden
Dim PicName#, 256
String PicName#, 0 = FileName$
Let ExHDC& = LoadExtImage (PicName#)
Dispose PicName#

' Dimensionen der Grafik ermitteln
Let PicWidth% = GetBmpWidth (ExHDC&)
Let PicHeight% = GetBmpHeight (ExHDC&)

' Bild in normalen %HDC laden, das sorgt für die Anzeige der Grafik
CopyExtBmp (%HDC, x%, y%, PicWidth%, PicHeight%, ExHDC&, 0, 0, m%)

' Bild in Kopie des %HDC (%HDC2) laden, damit das Fenster wieder aufgebaut
' werden kann. UND HIER LIEGT DAS PROBLEM. Anscheinend wird der %HDC2 nicht
' aktualisiert, denn wenn das Fenster neu gezeichnet werden muss, ist das
' Bild verschwunden. Das "Spannende" (u.v.a. nervige...) dabei ist, dass das
' NICHT im Interpreter-Modus auftritt sondern NUR bei compilierten Profan²-
' Programmen. Anscheinend funktioniert der Interpreter also richtig,
' während in der Runtime ein Fehler ist?! Oder?
CopyExtBmp (%HDC2, x%, y%, PicWidth%, PicHeight%, ExHDC&, 0, 0, m%)

' In der von Roland G. Hülsmann geschriebenen Include zur NViewLib aktualisiert
' er mit BitBlt auch %HDC und %HDC2. Da funktioniert das mit der Runtime auch.
' nicht. Also scheint %HDC2 das Problem sein... Was soll ich also tun? Kann
' man auf eine andere Art dafür sorgen, dass das Bild korrekt neu gezeichnet
' wird?

' Speicher freigeben, DLL entfernen
FreeExtBmp (ExHDC&)
FreeLibrary (ProSpeed&)
EndProc

' *** HAUPTPROGRAMM ***

' Hauptfenster erzeugen
Window 10, 10 - 640, 480
CLS 0

' Datei auswählen
While Equ$ (Datei$, "")
Let Datei$ = LoadFile$ ("Bild laden","*.jpg|*.jpg|*.gif|*.gif|*.bmp|*.bmp")
Wend

' Gewählte Grafik anzeigen
LoadPicture Datei$, 20, 20, 0

' Warteschleife; Programmende durch Klicken auf's x in der Titelleiste
While (i% = 0)
WaitInput
Wend

End



Frank Abbing
Datum:22.07.02 22:17 Antwortenals Email verschicken  


Hallo,

also mit Profan 7.5 funktioniert es richtig, ebenso mit Profan 7.0.

Von ProSpeed's Seite liegt kein Fehler vor.
Allerdings solltest du eine Dll immer am Anfang des Hauptprogramms öffnen und erst am Ende wieder freigeben, die Dll wurde in deinem Source ansonsten nicht gefunden, wenn das Verzeichnis des gewählten Bildes nicht das selbe Verzeichnis war, wie das, in dem sich die Dll befindet.

%HDC2 hält immer eine Kopie von %HDC bereit, um im Falle einer nötigen Fensterrekonstruktion das Bild wieder herstellen zu können. Ob das jetzt in Profan 5 nicht richtig funktioniert, kann ich leider auch nicht sagen.

Gruß, Frank


Mario Donick
Datum: 23.07.02 21:49 Antwortenals Email verschicken (mariodonick@yahoo.de) 


Hm, das ist ja ärgerlich. Dass es mit 7.x funktioniert. Ein Fehler meinerseits wäre besser gewesen. Aber ich würde gerne mal etwas von Roland G. Hülsmann dazu hören. Er müsste es ja wissen. Und mir vielleicht auch sagen können, wie ich diesen Bug umgehen kann...

Gruß

Mario



 Zurück zur Übersicht