Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#13

Re: JPEG Datei in NonVCL Prog laden

  Alt 23. Nov 2003, 13:47
Ich habe mir das eben mal angeschaut, und muss sagen:

@OLLI_T: Du hast einen furchtbaren Programmierstil. Mal schreibst du Schlüsselworte klein, dann wieder am Anfang groß. Mal lässt du ein Leerzeichen bei Vergleichen, dann wieder nicht. Ja ja, ich weiß, es war nur zu Demozwecken. Trotzdem ... Na ja, und die vielen exit-Anweisungen, was ja auch Luckie schon erwähnt hat ... hm ...
Wenn die Datei zwar geöffnet werden konnte, aber bspw. das Lesen nicht funktioniert, dann verlässt du deine Prozedur, ohne vorher das Handle "hFile" wieder freizugeben. Das würde nicht passieren, wenn du das ganze in try/finally einklammerst, wobei
CloseHandle(hFile); dann im finally-Teil stehen sollte.

Und für den Fall, dass mal mit der Dateigröße etwas nicht stimmt, wirst du vermutlich ein paar Fehler kassieren, denn bei mir meckert der Compiler (D5) hier
Zitat:
If (dwFileSize = -1) Then Exit;
dass der Vergleich immer Falsch ergibt. Ein DWord hat kein Vorzeichen und kann daher auch nicht kleiner als Null werden. Richtig wäre IMHO
if(dwFileSize = INVALID_FILE_SIZE) then exit; Und dann funktioniert deine Button-Klickprozedur nicht. "hRes" wird nie benötigt, und im Code findet man ein "DC1", von dem man nicht erfährt, woher es stammt. Ich habe stattdessen die "Show"-Funktion aus dem C-Sample als Grundlage benutzt, und es hat sofort problemlos geklappt:
Delphi-Quellcode:
if(LoadPicture('Dateiname.jpg',pPic)) then begin
  DC := GetDC(wnd);

  if(pPic.get_Width(hmWidth) = S_OK) and
    (pPic.get_Height(hmHeight) = S_OK) and
    (GetClientRect(wnd,rc)) then
  begin
    nWidth := MulDiv(hmWidth,GetDeviceCaps(DC,LOGPIXELSX),2540);
    nHeight := MulDiv(hmHeight,GetDeviceCaps(DC,LOGPIXELSY),2540);

    pPic.Render(DC,0,0,nWidth,nHeight,0,hmHeight,hmWidth,
      -hmHeight,rc);
  end;

  ReleaseDC(wnd,DC);
end;
Meine IPicture-Variable ist übrigens lokal, heißt "pPic" und wird als VAR-Parameter an deine (von mir leicht umgeschriebene) Funktion "LoadPicture" übergeben.

So, meine eigene Frage betrifft jetzt lediglich den Sinn der Werte 2540 in den Zeilen
Delphi-Quellcode:
    nWidth := MulDiv(hmWidth,GetDeviceCaps(DC,LOGPIXELSX),2540);
    nHeight := MulDiv(hmHeight,GetDeviceCaps(DC,LOGPIXELSY),2540);
Damit kann ich, offen gestanden, im Moment nichts anfangen. Ich weiß, dass die integer-Werte "hmWidth" und "hmHeight" nicht den Pixelmaßen entsprechen, und dass sie deshalb mit "MulDiv" umgerechnet werden. Aber woher bzw. woraus/wovon ergibt sich die 2540?

Gruß.
  Mit Zitat antworten Zitat