Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi JPEG Datei in NonVCL Prog laden (https://www.delphipraxis.net/12077-jpeg-datei-nonvcl-prog-laden.html)

choose 21. Nov 2003 22:32

Re: JPEG Datei in NonVCL Prog laden
 
Zitat:

Zitat von OLLI_T
HY Choose! Mit Deinem Wert klappt es nicht.

Sorry, mein Fehler: Habe fälschlicher Weise die IID aus den MSOffice-Server-Beschreibungen gezogen. Die Deklaration aus OleCtl, der Unit in der die von Dir benutzte Funktion OleLoadPicture eingebunden wird, stimmt mit der von Dir geposteten Version überein.

OLLI_T 21. Nov 2003 22:32

Re: JPEG Datei in NonVCL Prog laden
 
Hey, jetzt nicht meckern. Ich hab das so nur zu Demozwecken gemacht!

So bekommst Du das PIC zu sehen ... :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var hRes:HResult; DC,DCpic:HDC; DCout:HDC; BmpOut:OLE_HANDLE;
begin
  If LoadPicture('C:\Button.jpg') Then Begin
    DC:=GetDC(0);
    DCpic:=CreateCompatibleDC(DC);
    ReleaseDC(0,DC);
    pPicture.SelectPicture(DC1,DCout,BmpOut);
    BitBlt(Canvas.Handle,0,0,100000,100,DC1,0,0,SRCCOPY);
    pPicture:=NIL; DeleteDC(DCpic);
  End;
end;
Bin gerade dabei das Teil in meine DIB-Klasse einzubinden. Jetzt gibt es endlich einen Constructor CreateFromJPEGRessource. :dancer:

Tschau

OLLI

MathiasSimmack 23. Nov 2003 12:47

Re: JPEG Datei in NonVCL Prog laden
 
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
Delphi-Quellcode:
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:

Delphi-Quellcode:
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
Delphi-Quellcode:
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ß.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz