![]() |
with ... do begin Problem
HELP!!!!!!!!!!!!!!!!!!
Ausgangslage: procedure a .... with Image, Canvas do begin // TIMAGE-Komponente .... end; procedure b .... with PdfBox, Canvas do begin // TPDFBOX-Komponente von Synactis (Print direkt im Adobe-PDF-Format) .... end; möchte a + b zusammenlegen , weil procedure a+b identisch bis auf o.a. with - anweisungen leider ist PdfBox, Canvas vom Typ = TpdfCanvas und Image, Canvas = TCanvas Anmerkung: Ich verzweifle schön langsam an diesem Problem weil zwar die getrennten proceduren (a/b) einwandfrei funktionieren, nur ist die Wartung ziemlich mühsam da ja Änderungen 'immer' in beiden durchzuführen sind... (ca 70 Anweisungen Rectangel, ellipse, textout etc..) daher ist meine überlegung mittels einer variable zwischen den with pdfbox,canvas und image, canvas umzuschalten... nur leider!!!! ----keine Idee wie ich das lösen sollte... |
Moin Schlingel,
erst einmal herzlich willkommen in der Delphi-Praxis. Unter der Voraussetzung, dass PDFBox.Canvas von TCanvas abgeleitet ist sollte es so gehen:
Delphi-Quellcode:
Da ja die Eigenschaften bzw. Methoden in beiden Routinen die gleichen sind, wie Du sagst, wäre sonst wohl auch noch folgendes möglich (als Notbehelf):
procedure WithCanvasDo(const ACanvas : TCanvas);
begin with ACanvas do begin // Was auch immer mit dem Canvas geschehen soll end; end;
Delphi-Quellcode:
[EDIT]
procedure WithCanvasDo(const ACanvas : TObject);
begin with TCanvas(ACanvas) do begin // Was auch immer mit dem Canvas geschehen soll end; end; Ich sollte mal aufmerksamer lesen :oops: Es kommt wohl nur die zweite Variante in Frage, auch wenn diese erst mal getestet werden muss, ob's so dann geht. BTW: Statt TObject liesse sich natürlich auch der kleinste, beiden Objekten gemeinsame, Vorfahr nehmen. [/EDIT] |
immer noch Problem inkompatible Typen. unlösbares Problem?
funktioniert immer noch nicht...
hab keine Ahnung wie ich diese problem umgehen kann. |
Moin Schlingel,
wenn die 2. Variante auch nicht funktioniert stellt sich mir folgende Frage: Schluckt der Compiler das nicht, oder gibt es zur Laufzeit Fehler? Von welcher Klasse ist PDFCanvas denn abgeleitet? |
Dokumentation PDFBOX - Komponente
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Chris!
Das Problem ist, das sobald ich das Programm starte zwar die Ausgabe in der Image,Canvas funktioniert aber beim Umschalten auf die PdfBoxCanvas ein Zugriffsfehler und ein daraus resultierende Programm-Abbruch passiert. Im Anhang die Doku zur Komponente... da ich ausserstande bin, mit meinem Anfänger-Wissen Deine Fragen zu beantworten. Danke für Deine Mühen. |
Guten Tag
Guten Tag Schlingel,
warum erklärst du den den Leuten hier nicht, was man Dir in einem anderen Forum schon erklärt hat? TCanvas und TPdfBoxCanvas sind nicht identisch. Von daher ist der Versuch sie so anzusprechen sinnlos! Aber Du hast ja die Möglichkeit, noch in einigen anderen Foren die gleiche Frage zu stellen. Vielleicht wird ein Delphi-Programierer darauf aufmerksam und schreibt Delphi und dessen Syntax für Dich um. Mit Gruss StarFire |
Hallo Starfire!
Danke für Deinen gutgemeinten Ratschlag! Nur möchte ich hierzu anmerken... Eigentlich habe ich vor geraumer Zeit schon festgestellt das das so nicht geht... Eigenlich dachte ich, daß mir irgendjemand zumindest einen Tipp geben könnte wie die Lösungsmöglichkeiten für (mein) Problem sein könnte. Ausserdem verstehe ich nicht warum ich mir nicht möglichst viele Informationen einholen sollte, insbesondere da mir bis dato noch kein Lösungsansatz bekannt ist. In einem stimme ich Dir voll und ganz zu.... Ich denke mir 'nur' ein Delphi-Programmierer kennt sich wirklich bei Vererbund / Polymorphie / Zuweisungskompatibilität etc. wirklich aus. (Joke) Grüsse |
Zitat:
Hier mal ein Auszug: Zitat:
|
Ich verstehe dein Problem nicht wirklich aber sowas könnte dir helfen:
Du verzweigst in der Procedure, indem du das übergebene Object auf seine Art prüfst. Allerdings muss du dann in beiden Fallen TObject übergeben. procedure dingsdabums( pointer : TObject ); begin if pointer is TCanvas then begin .... end else begin { lass lieber den else Zweig weg und prüf nochmal das Object if pointer is TWasduwillst then ... } end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr. |
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