Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 241002 (2438)

| Suchen
| Zurück zur Übersicht

Autor | Thema: JPEG laden...
Mario Donick
| Datum:22.07.02 22:03 (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 |
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 (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