Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   DBImage mit printpdf darstellen (https://www.delphipraxis.net/62523-dbimage-mit-printpdf-darstellen.html)

tom_po 5. Feb 2006 22:50


DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Mit diesem Code hole ich mir ein Image (Bitmap) aus meiner DBisam-DB in meine Form:

Delphi-Quellcode:
dbisamquery2.SQL.Text:='select image from artplan where artigo='+quotedstr(trim(artikel.Text));
dbisamquery2.ExecSQL;
Ich habe ein pdf-Tool zum Darstellen meiner Daten im pdf-Format, wende es schon erfolgreich an. Ich exporte in's pdf schon Barcode, Memo usw
Habe aber jetzt Probleme beim Image mit diesem Code:

Delphi-Quellcode:
printpdf1.draw(100,100, dbimage1.Picture.Bitmap);
es gibt diese Meldung:

[Fehler] AknUni.pas(269): Inkompatible Typen: 'TImage' und 'TBitmap'

Tim Young von Dbisam hat mir dies gemailt:
This is really an issue for the TPrintPDF vendor, but you should be able to
cast the TDBImage to a TImage to get the desired result (TDBImage descends
from TImage)

Habe auch schon das probiert:

Delphi-Quellcode:
Image:=TImage.Create(dbimage1);
Image.Picture.Bitmap.Create;
printpdf1.ImageOut(100,200,TImage(Image));
kompiliert zwar, aber beim Anwenden kommt dann ne Fehlermeldung über Exception, siehe Bild

es wird dann auf die letzte Zeile meiner tnpdf-Unit hingewiesen:
Delphi-Quellcode:
SetBitmap(ABitmap.Picture.Bitmap);
das feld "image" hat in meiner DBIsam-Tabelle den DataType "graphic", musste nach Angaben von Tim Young von DBisam als bmp abgespeichert werden.
Die Komponente in meiner Form ist DBImage.


Wer kann helfen?

marabu 6. Feb 2006 08:39

Re: DBImage mit printpdf darstellen
 
Herzlich willkommen in der Delphi-PRAXiS.

Wenn die Methode Draw() der Komponente PrintPDF ein Image als letzten Parameter erwartet, dann sollte das prinzipiell so funktionieren:

Delphi-Quellcode:
var
  img: TImage;
begin
  img := TImage.Create(nil);
  try
    Image.Picture.Bitmap.Assign(DBImage.Picture.Bitmap);
    printpdf.draw(100,100, image);
  finally
    img.Free;
  end;
end;
DBImage ist kein Nachfahre von TImage, wovon man sich durch einen Blick in die Vererbungshierarchie (Online-Hilfe) leicht selbst überzeugen kann.

Freundliche Grüße vom marabu

tom_po 6. Feb 2006 11:47

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Malibu, zunächst herzlichen Dank, dass Du auf mein Problem antwortest, bin sehr froh darüber, da ich noch Anfänger bin...

Habe Deinen Code mal probiert, leicht geändert (image>>img und dbimage in dbimage1):

Delphi-Quellcode:
procedure Takn.Button3Click(Sender: TObject);
var img: Timage;
begin
 img := TImage.Create(nil);
  try
    Img.Picture.Bitmap.Assign(DBImage1.Picture.Bitmap);
    printpdf1.draw(100,100, img);
  finally
    img.Free;
  end;
end;
kompiliert schön, aber beim Ausführen bekomme ich wieder die CPU-Meldung, siehe Anhang.
Woran liegt das, was meinst Du?

marabu 6. Feb 2006 14:30

Re: DBImage mit printpdf darstellen
 
Hallo.

Ich vermute dass der Fehler beim Aufruf von PrintPDF.Draw() auftritt. Entweder die Komponente befindet sich nicht im richtigen Zustand, oder du verwendest die Methode eventuell falsch. Gibt es eine öffentlich zugängliche Dokumentation der Komponente? Ist die Komponente OpenSource oder kommerziell? Vielleicht gibt es eine Trial-Version? Hast du einen URL?

Wenn du eine Dokumentation besitzt, dann prüfe nochmal gewissenhaft, welchen Typ und welche Bedeutung der dritte Parameter der Methode Draw() hat.

marabu

tom_po 6. Feb 2006 14:53

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Marabu, die Komponente ist free (Nishita), hänge ein readme an, siehe auch hier der verwendete Code, auch die Procedure imageout, die ich auch schon testete, aber denselbe Exception (nullpointer) bekomme:

Delphi-Quellcode:
procedure TPrintPDF.Draw(X, Y: Integer; ABitmap:TImage);
begin
ImageOut(X, Y, ABitmap);
end;


procedure TPrintPDF.ImageOut(X, Y: Integer; ABitmap:TImage);
var tempsx,tempsy:double;
begin

tempsx:=((PageWidth)/(WinProcs.GetDeviceCaps(GetDC(0), LOGPIXELSX)*10.625));
tempsy:=((PageHeight)/(WinProcs.GetDeviceCaps(GetDC(0), LOGPIXELSY)*8));

NumberofImages:=NumberofImages+1;
StreamWriteStr(sTempStream,'q');
StreamWriteStr(sTempStream,IntToStr(trunc(ABitmap.Picture.Bitmap.Width*tempsx))+
' 0 0 '+IntToStr(trunc(ABitmap.Picture.Bitmap.Height*tempsy))+
 ' '+IntToStr(X)+' '+IntToStr(PageHeight-Y-trunc(ABitmap.Picture.Bitmap.Height*tempsy))
 +' cm');
StreamWriteStr(sTempStream,'/Im'+IntToStr(NumberofImages)+' Do');
StreamWriteStr(sTempStream,'Q');
SetBitmap(ABitmap.Picture.Bitmap);
end;
Auf Wunsch schicke ich Dir gerne die .pas per Mail zu, dazu würde ich deine e-mail haben, danke nochmals für Deine Hilfe.

marabu 6. Feb 2006 15:06

Re: DBImage mit printpdf darstellen
 
Sieht aus, als ob du alles richtig machst. Hast du die Methoden Draw() bzw. ImageOut() jemals erfolgreich eingesetzt?

Wenn du möchtest, dann zippe die PrintPDF-Komponente und stelle sie hier ein. Falls ich gleich vom Stuhl kippe, dann kann so auch jemand anders dir weiter helfen.

marabu

tom_po 6. Feb 2006 17:44

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hahahah, wollen wir doch hoffen, dass du dich noch lange auf deinem Stuhl hälst....

anbei die gezippte Komponente inkl. eines Beispiels...mir gefällt die Komponente. Sie hat auch bisher bestens geklappt, habe Text, Memobox, Barcode schon erfoglreich gedruckt, auch schon ein Bild, aber ein TImage mit der Eigenschaft Bitmap, noch kein TDBImage!

Schicke ein Screenprint vom TImage Code im nächsten Posting, weiss nicht, ob man 2 Anhänge hier gleichzeitig machen kann...

Vielleicht bringst du es doch hin, dass ich mein DBImage noch drucken kann, wäre prima.

tom_po 6. Feb 2006 17:45

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier das Bild von TImage code

marabu 6. Feb 2006 18:40

Re: DBImage mit printpdf darstellen
 
In der Unit TNPDF brauchst du im interface part diese Definition:

Delphi-Quellcode:
{$IFDEF VER150}
  {$DEFINE DFS_DELPHI_3_UP}
{$ENDIF}
marabu

tom_po 6. Feb 2006 18:46

Re: DBImage mit printpdf darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
mensch marabu, es klappt!!!!!!!!!!!!!bin happy, konnte zum ersten Mal das Bild darstellen.....

VIIIIIIIIIIEEEEEEEEEEEEELEN DAAAAAAAAAAAAAAAAAAANK !!!!!!!!!!!


nur noch ein Problem, es ist nach oben und unten in die Länge gezerrt....schau mal


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.
Seite 1 von 2  1 2      

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