Thema: Delphi TImage überschreiben

Einzelnen Beitrag anzeigen

ksh
(Gast)

n/a Beiträge
 
#6

Re: TImage überschreiben

  Alt 5. Jul 2006, 09:08
ist ein kleineres Projekt

sorry, war etwas neben der Kappe gestern!

also:
1. Formular MainWindow mit TImage und Menü - darunter eben auch der Menüpunkt ändern, der folgenden Quellcode enthält:
Delphi-Quellcode:
procedure TMainWindow.AendernClick(Sender: TObject);
begin
  if Eingabe.ShowModal = mrOK then
  begin
    // Detailansicht verfügbar machen
    BildGroesse(3);
    if TJubilaeum then
      PAusgabe(1, main.MainWindow.Bild.Canvas, 'B', 'J')
    else if TTeilwert then
      PAusgabe(1, main.MainWindow.Bild.Canvas, 'B', 'T')
    else if TIAS then
      PAusgabe(1, main.MainWindow.Bild.Canvas, 'B', 'I');
    // Menüeinträge verfügbar machen
    Bearbeiten.Enabled:=True;
    Drucken.Enabled:=True;
  end;
end;
2. Forumal Eingabe - hier werden Daten eingegeben, die dann berechnet werden (in ziemlich vielen anderen Units, aber das ist ja nicht das Problem)
3. Die Grafiken werden wie schon gesagt in der Unit Ausgabe initialisiert. Hier mal der gekürzte Quellcode:
Delphi-Quellcode:
{******************************************************************************}
{ PROCEDURE : BildGroesse                                                      }
{                                                                              }
{ AUFGABE: legt die Höhe des Bild.Canvas auf die angegebene Anzahl Seiten fest }
{******************************************************************************}
procedure BildGroesse(Seitenzahl: Integer);
begin
  with Mainwindow do
  begin
    bild.visible := true;
    bild.Align := alclient;
    bild.align:= alnone;
    bild.Left := 20;
    bild.width := 2*round(bild.Height*0.7);
    bild.height := 2 * Seitenzahl*bild.Height;
    myprint.pagex := mainwindow.Bild.Width;
    myprint.pagey := mainwindow.Bild.Height div Seitenzahl;
    diff := 0;
  end;
end;

{********************************************************}
{ PROCEDURE : PAusgabe                                   }
{                                                        }
{ AUFGABE: erzeugt die Bildschirmausgabe sowie den Druck }
{********************************************************}
procedure PAusgabe( copies: integer; // Anzahl Ausdrucke
                    target:tcanvas; // target : entweder bild.canvas
                                        // oder printer.canvas
                    targetStr: Char; // targetstr : entweder 'B' für Bildschirmausgabe
                                        // oder 'D' für Drucker
                    Ausgabe: char); // Ausgabe : entweder T für Teilwertausgabe
                                        // oder J für Jubiläumsausgabe
label LTeilwert, LEnde, LJubilaeum1, LJubilaeum2, LJubilaeum3, LJubilaeum4,
      LJubilaeum5, LJubilaeum6, LJubilaeum7, LIAS;
var copycount,i,p,pmax,ep : Integer;
    lf : logfont;
begin
    with mainwindow do
    begin
      for copycount := 1 to Copies do
      begin
        myprint.target:=target;
        if targetstr = 'Dthen
        begin
          Printer.Title := 'Teilwert v. 4.0';
          myprint.pagex := printer.pagewidth;
          myprint.pagey := printer.pageheight;
          Diff := 0;
          p:=0;
          // 83 ist Druckendalter!
          pmax:=trunc((83-AngDaten.PersDaten.PersX-p*22) / 22);
          if (83-AngDaten.PersDaten.PersX-p*22) mod 22 > 0 then pmax:=pmax+1;
          printer.BeginDoc;
        end; // if targetstr = 'D' then

      lf.lfCharSet := DEFAULT_CHARSET;
      lf.lfFaceName := 'Arial';
      target.Font.Handle := CreateFontIndirect(lf);
      target.Font.Color := clblack;
      if targetstr <> 'Dthen BildGroesse(2);

      if Ausgabe = 'Tthen
        GoTo LTeilwert
//....
{*********************** Beginn LTeilwert ***********************}
      LTeilwert:

        target.Font.Style:= [];
        lf.lfFaceName := 'Arial Narrow';
        target.Font.Handle := CreateFontIndirect(lf);
        // entsprechend zu druckende Zeilen
        if pmax > p+1 then ep := 22
        else ep := 83-AngDaten.PersDaten.PersX-p*22-1;
        p:=p+1;

        // Überschrift Dokument
        target.Font.Style:= [fsBold,fsUnderline];
        setfont(16);
        prntext(3,1.5,'VERSICHERUNGSMATHEMATISCHE BERECHNUNGEN',0,0);
        target.Font.Style:= [fsBold];
        setfont(11);
        prntext(5,2.3,'Richttafeln 2005 von Dr. Klaus Heubeck',0,0);

        with AngDaten.EinDaten do
        begin
          setfont(10);
          prntext(3,3,'Firma:',0,0);
          prntext(6,3,EinFirma,0,0);
          prntext(3,3.5,'Personalnummer:',0,0);
          prntext(6,3.5,EinPersNr,0,0);
//...
        // beim Ausdrucken Datum sowie Seitenzahlen angeben
        if targetstr = 'Dthen
        begin
          target.font.Pitch := fpDefault;
          //prnline(0,28,maxx,28);
          SetFont(12);
          prntext(0,28.5,datetostr(date),0,0);
          prntext(18,28.5,'Seite '+inttostr(p)+'/'+inttostr(pmax),0,0);
          // neue Seite ausdrucken wenn notwendig
          if p < pmax then
          begin
            Printer.NewPage;
            goto LTeilwert;
          end; // if p < pmax then
        end; // if targetstr = 'D' then

        Goto LEnde;
{************************* Beginn LEnde *************************}

      LEnde:
        if targetstr = 'Dthen if printer.Printing = true then printer.enddoc;
        if Ausgabe = 'Jthen
          if targetstr <> 'Bthen BildGroesse(7);
    end;
  end;
end;
Ich weiß, vielleicht würde es über einen Report besser/leichter gehen, aber ich musste den Quellcode von meinem Vorgänger übernehmen...
jetzt klarer?
  Mit Zitat antworten Zitat