Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Abrir programa y mandar imprimir (https://www.clubdelphi.com/foros/showthread.php?t=81656)

Basi 04-12-2012 15:27:46

Abrir programa y mandar imprimir
 
Hola a todos espero esten bien, entrando en el tema a que tengo mi duda es como mandar imprimir ya una ves que ya este abierto el programa para explicarme bien lo que quiero hacer es despues que habra el pain me lleve a archivo y de hay imprimir me quede en la parte de abril el pain este es mi codigo

Código Delphi [-]
procedure TForm1.PainPanelClick(Sender: TObject);
begin
  ShellExecute (Handle,'open','mspaint.exe', nil, nil,  SW_SHOWNORMAL);
end;

Espero me puedan ayudar o darme uma idea de como hacerlo^\||/ ah soy nuevo en esto.

Faust 04-12-2012 16:34:05

Bueno, pues al parecer te falta abrir el archivo, en este caso creo que debes poner la ruta del archivo en el parámetro lpParameters de la función ShellExecute, o en el parámetro lpFile si el archivo de imagen ya está asociado al mspaint, así como la instrucción print, ahí te van los ejemplos:

Si la imagen está asociada a mspaint... sino la imprimirá con el programa asociado

Código Delphi [-]
procedure TForm1.PainPanelClick(Sender: TObject); 
  begin
    ShellExecute (Handle,'print','c:\imagen.bmp', nil, nil,  SW_HIDE);
  end;

De este no estoy seguro, pero debería abrir el archivo e imprimirlo

Código Delphi [-]
procedure TForm1.PainPanelClick(Sender: TObject);
  begin
    ShellExecute (Handle,'print','mspaint.exe', nil, 'c:\imagen.bmp',  SW_SHOWNORMAL);
  end;

Te dejo esto para qe lo cheques http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Basi 04-12-2012 16:49:08

Faust,

Gracias por reponder y dar tus ejemplos en estos momento lo voy a poner a prueba pero me conformaria con que abriera por lo menos el menu de imprimir bueno gracias otra vez

Basi 04-12-2012 20:12:58

hola a todos disculpen pero no eh dado aun con lo que menciopnado arriba eh estado probando algunas formas y nada si alguien me puede dar otra idea mas clara se lo agradeceria..

nlsgarcia 05-12-2012 02:30:30

Basi,

ShellExecuteEx es la versión extendida de ShellExecute.

Revisa este código:
Código Delphi [-]
function ShellExecute_AndWait(Operation, FileName, Parameter, Directory: string;
                              Show: Word; bWait: Boolean): Longint;
var
  FResult: Boolean;
  Info: TShellExecuteInfo;

begin
  FillChar(Info, SizeOf(Info), Chr(0));
  Info.cbSize := SizeOf(Info);
  Info.fMask := SEE_MASK_NOCLOSEPROCESS;
  Info.lpVerb := PChar(Operation);
  Info.lpFile := PChar(FileName);
  Info.lpParameters := PChar(Parameter);
  Info.lpDirectory := PChar(Directory);
  Info.nShow := Show;
  FResult := ShellExecuteEx(@Info);
  if FResult then
  begin
    if bWait then
    begin
      while
        WaitForSingleObject(Info.hProcess, 100) = WAIT_TIMEOUT
        do Application.ProcessMessages;
      FResult := GetExitCodeProcess(Info.hProcess, DWORD(Result));
    end
    else
      Result := 0;
  end;
  if not FResult then Result := -1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   ShellExecute_AndWait('print','msPaint','d:\image1.bmp','',SW_SHOWNORMAL,False);
end;
Al ejecutar el código anterior se muestra el siguiente mensaje:
Cita:

This file does not have a program associated with it for performing this action. Please install a program or, if one is already, create an association in the Default Programs control panel.
Conclusión: MsPaint no soporta la impresión vía parámetros, debes buscar un programa que la soporte y luego puedes imprimirlo por medio del siguiente código:
Código Delphi [-]
   ShellExecute(Handle,'print','d:\image1.bmp', nil, nil, SW_SHOWNORMAL);
Espero sea útil :)

Nelson.

ecfisa 05-12-2012 03:55:10

Hola Basi.

Para imprimir un archivo de imágen:
Código Delphi [-]
  
  ShellExecute(Handle 'open', 'mspaint', ' /p C:\Carpeta\SubCarpeta\Nombre.JPG', nil, SW_HIDE);
Es necesario que haya un espacio entre el nombre del ejecutable (mspaint) y la línea de comandos, por eso esta debe empezar por uno.

Solamente encontré el switch '/p' para imprimir y '/pt Nombre_impresora' para seleccionar la impresora (este último no lo probé). Pero ninguno que permita presentar el menu de impresión como solicitas en el mensaje #3.

Saludos.

nlsgarcia 05-12-2012 04:43:29

Basi,

Cita:

Empezado por nlsgarcia:
MsPaint no soporta la impresión vía parámetros.

Corrección: Mspaint no soporta la operación Print de ShellExecute.

Nota:
La operación print de ShellExecute, imprime el archivo especificado por lpFile. Si lpFile no es un documento la función falla.

Puedes imprimir la imagen con ShellExecute como indico ecfisa.

Espero sea útil :)

Nelson.

Basi 05-12-2012 15:48:56

hola Ecfisa y NslGarcia

Ya hice algunas pruebas y adapte el codigo para la impresion de la imagen y me funciono bien y sobre el mensaje #3 eso era lo que queria hacer el principio que cuando abriera un programa luego llamar un menu del mismo y luego de ese menu abierto me ejecutara una funcion o eligiera algo asi como un atajo, pero por lo visto es un poco mas complicado de lo que me imaginaba bueno voy a seguir buscando una u otra forma pero con lo que dijo Ecfisa creo que no hay metodo para hacer eso si consigo algo lo publicare por aca saludos a todos que pasen por este hilo....

nlsgarcia 05-12-2012 21:11:29

Basi,

Cita:

Empezado por Basi
mi duda es como mandar imprimir ya una ves que ya este abierto el programa para explicarme bien lo que quiero hacer es despues que habra el pain me lleve a archivo y de hay imprimir

Cita:

Empezado por Basi
me conformaria con que abriera por lo menos el menu de imprimir

Cita:

Empezado por Basi
sobre el mensaje #3 eso era lo que queria hacer el principio que cuando abriera un programa luego llamar un menu del mismo y luego de ese menu abierto me ejecutara una funcion o eligiera algo asi como un atajo

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Printers, ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   printDialog : TPrintDialog;
   openDialog : TOpenDialog;
   Parameters : String;

begin
   openDialog := TOpenDialog.Create(self);
   openDialog.InitialDir := GetCurrentDir;
   openDialog.Options := [ofFileMustExist];
   openDialog.Filter := 'Archivos BMP|*.bmp';
   openDialog.FilterIndex := 1;

   if openDialog.Execute then
   begin
      printDialog := TPrintDialog.Create(Self);
      if printDialog.Execute then
      begin
         Parameters := ' /p ' + '"' + openDialog.FileName + '"' + ' /pt ' + '"' + Printer.Printers[Printer.PrinterIndex] + '"';
         ShellExecute(Handle, 'open', 'mspaint', Pchar(Parameters), nil, SW_HIDE);
      end
   end;

   openDialog.Free;
   printDialog.Free

end;

end.
El código anterior permite seleccionar la impresora y el archivo a imprimir de tipo BMP por medio de los componentes TOpenDialog y TPrintDialog y realizar la impresión con MsPaint por medio de ShellExecute.

Espero sea útil :)

Nelson.

ecfisa 05-12-2012 22:34:53

Hola.

Se que derrapo a la banquina y que no tiene nada que ver con mspaint, pero ... ¿ Y si directamente imprimis la imágen desde Delphi ?

Código Delphi [-]
...
implementation

uses Printers, jpeg;

procedure Imprimir(const aFileName: string; const Copias: Integer);
var
  X,Y: Integer;
  R  : TRect;
  i  : Integer;
begin
  with TPicture.Create do
  try
    LoadFromFile(aFileName);
    with Printer do
    begin
      for i:= 1 to Copias do
      begin
        BeginDoc;
        X:= GetDeviceCaps(Handle, logPixelsX) div Screen.PixelsPerInch;
        Y:= GetDeviceCaps(Handle, logPixelsY) div Screen.PixelsPerInch;
        R:= Rect(0, 0, Width * X, Height * Y);
        Canvas.StretchDraw(R, Graphic);
        EndDoc
      end
    end
  finally
    Free
  end
end;

procedure TForm1.btnPrintClick(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    if PrintDialog1.Execute then
      Imprimir(OpenPictureDialog1.FileName, PrintDialog1.Copies);
  end;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 10:37:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi