Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [delphi]stampa sezione immagine

    Ciao!
    Vorrei riuscire a stampare una parte della mia immagine (Img).
    Uso questo codice:
    codice:
    procedure TForm.btStampaClick(Sender: TObject);
     var
        CurrentPrinter: TPrinter;
     const
      Rect:Trect=(left:0;Top:0;Right:200;Bottom:200);
    
      begin
        CurrentPrinter := Printer;
        BoundsRect:=Rect;
    
        if   StampaSetup.Execute then
    
        CurrentPrinter.BeginDoc;
        Img.AutoSize:=true;
        Img.scalemode:=smstretch;
        Img.Bitmap.Drawto(Printer.Canvas.Handle, Printer.Canvas.ClipRect,Img.Bitmap.BoundsRect);
        CurrentPrinter.EndDoc;
    
    end;
    ...ma assolutamente non ci riesco. Forse, visto il codice è normale che sia così. Potreste darmi un suggerimento ?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Definisci "non ci riesco"...

    Ottieni un risultato diverso da quello voluto o inaspettato?
    Di che tipo? Ottieni un'eccezione?

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Vorresti dire che il codice è giusto???
    A me stampa sempre l'immagine completa e non un quadrato in alto a sinistra con il lato di 200 px.

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da vicky
    Vorresti dire che il codice è giusto???
    No, ma non voglio analizzarlo o provarlo se non è necessario: sapendo il problema, potrei indovinare senza provare.

    Originariamente inviato da vicky
    A me stampa sempre l'immagine completa e non un quadrato in alto a sinistra con il lato di 200 px.
    La costante che hai dichiarato (Rect) non viene usata; al suo posto, ridefinisci il valore di BoundsRect che, scritta così, è la proprietà del form, che non ha alcuna inflienza sull'immagine o sulla stampante.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Se si scrivo in questo modo mi dà errore :

    codice:
     
    var
        CurrentPrinter: TPrinter;
     const
       Rect:Trect=(left:0;Top:0;Right:200;Botto
    m:200);
    
      begin
        CurrentPrinter := Printer;
        ImgFoglioRettangolo.Bitmap.BoundsRect:=Rect;
        if   StampaSetup.Execute then
    
        CurrentPrinter.BeginDoc;
        Img.AutoSize:=true;
        Img.scalemode:=smstretch;
        Img.Bitmap.Drawto(Printer.Canvas.Handle, Printer.Canvas.ClipRect,Img.Bitmap.BoundsRect);
        CurrentPrinter.EndDoc;
    
    end;
    Ecco l'errore:
    Left side cannot be assigned to

    Abbi pazienza...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da vicky
    Se si scrivo in questo modo mi dà errore
    Ci sono diversi errori nel tuo codice, ma dovrei avere il tempo di analizzare la questione e di scrivere il codice corretto e ora sono un po' tirato.

    Se porti pazienza, ti scriverò una versione corretta da parametrizzare il prima possibile.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Ecco un esempio di codice per la stampa di una porzione d'immagine (regolabile) su carta, con la possibilità di definire anche l'area di destinazione finale.
    codice:
    procedure TMainForm.PrintButtonClick(Sender: TObject);
    var
      SourceRect, DestRect: TRect;
    begin
      // Visualizza la finestra di dialogo che precede la stampa
      if PrnSetupDialog.Execute then
      begin
        // Determina l'area dell'immagine da copiare
        SourceRect := Rect(0, 0, 200, 200);
        // Determina l'area di stampa in cui copiare la porzione di immagine
        DestRect := Rect(0, 0, 600, 600);
        // Avvia il processo di stampa
        Printer.BeginDoc;
        try
          // Copia l'immagine sul "foglio virtuale" della stampante
          SampleImage.Bitmap.DrawTo(Printer.Canvas.Handle, DestRect, SourceRect);
          // Conclude il processo di stampa
          Printer.EndDoc;
        except
          // Annulla la stampa (in caso di errore)
          Printer.Abort;
        end;
      end;
    end;
    Modificando le variabili SourceRect e DestRect, è possibile regolare rispettivamente la porzione di immagine da copiare e l'area in cui tale porzione deve essere tracciata sul "foglio virtuale" della stampante.

    Le restanti spiegazioni si trovano nei commenti con cui è decorato il codice.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.