Results 1 to 4 of 4

Thread: probleem: hoe weergegeven grafiek printen.

  1. #1

    Unhappy

    Dag iedereen,

    Ik heb een probleem met het afdrukken van een grafiek.
    ZIE DE VRAAG ONDERAAN DE MESSAGE.

    Het programma waarin dit verwerkt zit werkt als volgt:

    * Na startknop stuurt het programma signalen via een kaart naar een meetopstelling ==> die meetopstelling stuurt signalen terug naar de kaart ==> de kaart geeft die signalen door aan het programma

    * Het programma geeft de signalen in een component Grafiek. (Dit component is aangemaakt door Delphi zelf toe ik, nadat ik de OSX had geinstaleerd, m.b.v. van Component ==> install component de unit grafiek.pas had geladen.
    {Alleen met dit component kan je de gewenste gegevens vertonen, omdat je een signaal moet meten en na een}

    Nu wil men graag dat de grafiek kan worden geprint, met de resultaten erbij(dit is er al, zie code).

    Er is al de volgende code voor het afdrukken:

    Code:
    procedure TTrillingFormulier.KnopAfdrukkenClick(Sender: TObject);
    var Logo: TBitmap;
        x, y, z: Integer;
        Msg: Boolean;
        Breed, Hoog: Integer;
        Str, Keur: String;
        v, w: Variant;
    begin
         Msg:= DlgPrint.Execute;
         if Msg then
         begin
              with Printer do
              begin
                   Breed:= PageWidth;
                   Hoog:= PageHeight;
                   Logo:= TBitmap.Create;
                   Logo.LoadFromFile('C:\Program Files\Borland\Delphi 3\Gulogo.bmp');
                   BeginDoc;
                   with Canvas do
                   begin
                        Font.Charset:= 1;
                        Font.Name:= 'Arial Narrow';
                        Font.Size:= 16;
                        x:= CmbBoxLoc.ItemIndex;
                        y:= CmbBoxMachine.ItemIndex;
                        z:= CmbBoxOpnemer.ItemIndex;
                        TextOut(20, 40 + Logo.Height + Font.Height,
                        'Vibratie rapport locatie ' + CmbBoxLoc.Items.Strings[x] +
                        ', machine ' + CmbBoxMachine.Items.Strings[y] +
                        ', opnemer ' + CmbBoxOpnemer.Items.Strings[z]);
                        MoveTo(PenPos.x, 40 + Logo.Height);
                        LineTo(Breed - 20 - Logo.Width, 40 + Logo.Height);
                        Draw(PenPos.x, 40, Logo);
                        MoveTo(20, Hoog - 80);
                        LineTo(Breed - 20, Hoog - 80);
                        Font.Size:= 12;
                        Font.Style:= Font.Style + [fsItalic];
                        TextOut(20, 500, 'Opnemer');
                        Font.Style:= Font.Style - [fsItalic];
                        TextOut(100, 650, 'Type: ' + FOpnemerType);
                        v:= FOpnemerGevoeligheid; Str:= v;
                        case FOpnemerSoort of
                             0: begin
                                     TextOut(100, 800, 'Soort: Versnelling (Acceleratie)');
                                     TextOut(100, 950, 'Gevoeligheid: ' + Str + ' mV/m/s2');
                                end;
                             1: begin
                                     TextOut(100, 800, 'Soort: Snelheid (Velocity)');
                                     TextOut(100, 950, 'Gevoeligheid: ' + Str + ' mV/mm/s');
                                end;
                        end;   
                        Font.Style:= Font.Style + [fsItalic];
                        TextOut(20, 1500, 'Resultaten');
                        Font.Style:= Font.Style - [fsItalic];
                        TextOut(1100, 1650, 'Bij 60 Hz');  
                        TextOut(2100, 1650, 'Bij 120 Hz');
                        TextOut(3100, 1650, 'Bij 180 Hz');
                        TextOut(100, 1800, 'Referentie-opnemer');
                        TextOut(100, 1950, 'Test-opnemer');
                        TextOut(100, 2100, 'Monitor');  
                        TextOut(4100, 1800, 'mm/s');
                        TextOut(4100, 1950, 'mm/s');
                        TextOut(4100, 2100, 'mm/s');
                        MoveTo(1080, 1650);
                        LineTo(4080, 1650);   
                        MoveTo(80, 1800);
                        LineTo(4580, 1800);
                        MoveTo(80, 1950);
                        LineTo(4580, 1950);
                        MoveTo(80, 2100);
                        LineTo(4580, 2100);
                        MoveTo(80, 2250);
                        LineTo(4580, 2250);
                        MoveTo(80, 1800);
                        LineTo(80, 2250);
                        MoveTo(1080, 1650);
                        LineTo(1080, 2250);
                        MoveTo(2080, 1650);
                        LineTo(2080, 2250);
                        MoveTo(3080, 1650);
                        LineTo(3080, 2250);
                        MoveTo(4080, 1650);
                        LineTo(4080, 2250); 
                        MoveTo(4580, 1800);
                        LineTo(4580, 2250);
                        v:= FResultaten[1][1]; Str:= v; Delete(Str, 7, 20);
                        TextOut(1100, 1800, Str);
                        w:= FResultaten[1][2]; Str:= w; Delete(Str, 7, 20);
                        if (w < (0.95 * v)) or (w > (1.05 * v))
                        then Keur:= '    > 5% !!!' else Keur:= '    < 5%';
                        TextOut(1100, 1950, Str + Keur);
                        w:= FResultaten[1][3]; Str:= w; Delete(Str, 7, 20);
                        if (w < (0.95 * v)) or (w > (1.05 * v))
                        then Keur:= '    > 5% !!!' else Keur:= '    < 5%';
                        TextOut(1100, 2100, Str + Keur);
                        v:= FResultaten[2][1]; Str:= v; Delete(Str, 7, 20);
                        TextOut(2100, 1800, Str);
                        w:= FResultaten[2][2]; Str:= w; Delete(Str, 7, 20); 
                        if (w < (0.95 * v)) or (w > (1.05 * v))
                        then Keur:= '    > 5% !!!' else Keur:= '    < 5%';
                        TextOut(2100, 1950, Str + Keur);
                        w:= FResultaten[2][3]; Str:= w; Delete(Str, 7, 20);
                        if (w < (0.95 * v)) or (w > (1.05 * v))
                        then Keur:= '    > 5% !!!' else Keur:= '    < 5%';
                        TextOut(2100, 2100, Str + Keur);
                        v:= FResultaten[3][1]; Str:= v; Delete(Str, 7, 20);
                        TextOut(3100, 1800, Str);
                        w:= FResultaten[3][2]; Str:= w; Delete(Str, 7, 20);
                        if (w < (0.95 * v)) or (w > (1.05 * v))
                        then Keur:= '    > 5% !!!' else Keur:= '    < 5%';
                        TextOut(3100, 1950, Str + Keur);
                        w:= FResultaten[3][3]; Str:= w; Delete(Str, 7, 20);
                        if (w < (0.95 * v)) or (w > (1.05 * v))
                        then Keur:= '    > 5% !!!' else Keur:= '    < 5%';
                        TextOut(3100, 2100, Str + Keur);
                        
                        PolyLine([Point(500, 3000),Point(500, 4000),Point(4500, 4000)]);
    
                   end;
                   EndDoc;
                   Logo.Free;
              end;
         end;
    end;
    Nu wordt alles uitgeprint, zoals resultaten en een x- en y-as, maar in de code staat nog niet dat hij de grafiek 'ziet' en kan uitprinten.

    Wie kan mij op weg helpen met dit probleem. Zoals een evt. begin of waar ik iets kan vinden over het printen van grafieken, zoals boven beschreven!!!

    Bij Voorbaad Dank

    expert of doing notting groetjes,

    gajes

  2. #2
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199

    Question Canvas property

    heeft dat Grafiek-componentje een Canvas-property wat je zou kunnen kopieren naar het Printer.Canvas?
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  3. #3
    Als ik het goed zie wordt de grafiek hier helemaal opnieuw getekend, maar dan op de printer. Je zou ook kunnen proberen het formulier waar de grafiek op staat als bitmap af te drukken.

    Je maakt dan dus eigenlijk een schermafdruk, ik weet eerlijk gezegd niet wat voor kwaliteit je dan krijgt. Een kopie van je scherm op de printer maak je op deze manier:

    Code:
    var
      ScaleX, ScaleY: Integer;
      R: TRect;
      Bitmap: TBitmap;
    begin
      Bitmap :=  TBitmap.Create;
      try
        Bitmap.Assign(GetFormImage);
    
        Printer.BeginDoc;
        with Printer do
        try
          ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
          ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
          R := Rect(0, 0, Bitmap.Width * ScaleX,
            Bitmap.Height * ScaleY);
          Canvas.StretchDraw(R, Bitmap);  // **
        finally
          EndDoc;
        end;
      finally
        Bitmap.Free;
      end;
    end;
    Suc6!
    Marcel

  4. #4
    Ha mathijs,

    Ten eerste dank voor de reactie.
    Hoe kan ik zien of een component een Canvas-property heeft of niet. Waar moet ik dan kijken?

    Ha marcel, ook jij dank voor de reactie. Ik zal het eens gaan proberen. Kom ik er niet uit laat ik jullie het wel weten.



    Kom ik er niet uit laat ik jullie het wel weten.
    Marcel,

    Het idee was goed, maar je krijgt een rare afbeelding op papier.
    Tevens had ik even de huidige tekst vervangen door de code, maar toe kwam er alleen maar een wit papier uit, hij deed dus niks.
    Dus jammer maar helaas, dit was geen oplossing. Maar we geven het nog niet op.
    Last edited by gajes; 08-May-01 at 12:28.
    expert of doing notting groetjes,

    gajes

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. TDBchart probleem
    By StephanShagwell in forum Algemeen
    Replies: 1
    Last Post: 06-Mar-03, 16:23
  2. Probleem om plaatjes te printen in Scale :<
    By Basso in forum Algemeen
    Replies: 8
    Last Post: 02-Sep-02, 12:19
  3. hoe kan ik twee pagina's printen
    By Gerard in forum Algemeen
    Replies: 4
    Last Post: 04-Jan-02, 19:36
  4. algorithme/functioneel probleem
    By walterheck in forum Algemeen
    Replies: 1
    Last Post: 11-Oct-01, 11:48
  5. Replies: 6
    Last Post: 15-Jun-01, 09:04

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •