Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi with ... do begin Problem (https://www.delphipraxis.net/2944-do-begin-problem.html)

Schlingel 15. Feb 2003 13:58


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...

Christian Seehase 15. Feb 2003 14:10

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:
procedure WithCanvasDo(const ACanvas : TCanvas);
begin
  with ACanvas do
  begin
    // Was auch immer mit dem Canvas geschehen soll
  end;
end;
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):

Delphi-Quellcode:
procedure WithCanvasDo(const ACanvas : TObject);
begin
  with TCanvas(ACanvas) do
  begin
    // Was auch immer mit dem Canvas geschehen soll
  end;
end;
[EDIT]
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]

Schlingel 16. Feb 2003 13:10

immer noch Problem inkompatible Typen. unlösbares Problem?
 
funktioniert immer noch nicht...

hab keine Ahnung wie ich diese problem umgehen kann.

Christian Seehase 16. Feb 2003 13:18

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?

Schlingel 16. Feb 2003 13:50

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.

StarFire 16. Feb 2003 16:00

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

Schlingel 16. Feb 2003 17:16

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

jbg 16. Feb 2003 18:27

Zitat:

Zitat von Schlingel
insbesondere da mir bis dato noch kein Lösungsansatz bekannt ist.

Und was hältst du von der Antwort im anderen Forum?
Hier mal ein Auszug:
Zitat:

Zitat von AHUser
Die einzige Möglichkeit die dir bleibt, ist eine Zwischen-Klasse schreiben, die die Befehle an TPdfCanvas bzw. TCanvas weiterleitet.

Das ist doch eine Lösungsmöglichkeit. Zwar nicht einfach, aber es würde so funktionieren.

Touchdown 17. Feb 2003 19:59

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 23:40 Uhr.

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