Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Algunas preguntillas.... (https://www.clubdelphi.com/foros/showthread.php?t=3696)

craven 17-09-2003 11:52:22

Algunas preguntillas....
 
Hola amigos. Se que activando la opción GENERATE CONSOLE APLICATION del menu PROYECT->OPCIONES, se genera una consola de MSDOS. No obstante, me gustaria saber si existe alguna forma para que esa consola se active solo si cargo el programa desde la linea de comando y con determinados parámetros; en otro caso, esto es, si cargo desde Windows, no aparezca la consola automáticamente.

Por otro lado, quisiera saber cómo puedo hacer para que arrastrando un determinado archivo sobre el form de mi programa, éste se cargue automáticamente.

Muchas gracias a todos. Un saludo.

roman 17-09-2003 19:05:09

En cuanto a la primera pregunta no sé la respuesta y te recomiendo abrir hilos distintos si las preguntas son de naturaleza distinta.

En lo que se refiere a la segunda pregunta debes usar la función DragAcceptFiles de la unidad ShellApi. Te pongo aquí un breve resumen de lo que necesitas.

DragAcceptFiles le pasas el "handle" del formulario que desees que acepte archivos. El segundo parámetro habilita o inhabilita la opción.

WM_DROPFILES
Windows mandará este mensaje a la ventana que registres en el momento en que el usuario suelte el (o los) archivos en tu formulario. El mensaje lleva un parámetro "Drop" que necesitas para las siguientes funciones, mismas que procesas en el manejador de este mensaje.

DragQueryPoint
Te indica el lugar en donde el usuario suelta el archivo. De esa manera puedes determinar si el archivo se suelta en el control que realmente desees, por ejemplo un Memo.

DragQueryFile
Te indica el o los archivos que se sueltan (o bien el número de archivos). Con esta función puedes entonces saber el nombre del archivo y determinar si es apto para cargarse.

DragQueryFinish
Termina el proceso de arrastrado y libera recursos.

Te pongo aquí un ejemplo completo para poder cargar archivos 'txt' en un memo del formulario. Esto te servirá de punrto de partida; para más información busca en la ayuda de Windows SDK (incluida con Delphi) acerca de la función DragAcceptFiles.

Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

  private
    Drop: HDROP;
    procedure WMDropFiles(var Message: TWMDropFiles); message WM_DROPFILES;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Aceptar archivos
  DragAcceptFiles(Handle, true);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // Dejar de aceptar archivos
  DragAcceptFiles(Handle, false);
end;

procedure TForm1.WMDropFiles(var Message: TWMDropFiles);
var
  Punto: TPoint;
  Archivo: array[0..MAX_PATH - 1] of Char;
  Extension: String;

begin
  // Referencia al archivo arrastrado
  Drop := Message.Drop;

  // Determinar en qué punto de la ventana se soltó
  DragQueryPoint(Drop, Punto);

  // Y procesarlo si quedó dentro del memo
  if PtInRect(Memo1.BoundsRect, Punto) then
  begin
    // Obtener el nombre del archivo arrastrado
    // * Consultar la ayuda para el segundo parámetro *
    DragQueryFile(Drop, 0, Archivo, MAX_PATH);

    // Determinar si es del tipo adecuado
    // y en su caso cargar el archivo
    Extension := ExtractFileExt(Archivo);
    if Extension = '.txt' then
      Memo1.Lines.LoadFromFile(Archivo);
  end;

  // Liberar recursos
  DragFinish(Drop);

  // Necesario para que la aplicación no quede detrás
  // del origen del archivo (p. ej. el Explorador)
  Application.BringToFront;
end;

end.


// Saludos

jachguate 17-09-2003 19:23:28

Para que se ejecute solo si recibis ciertos parametros, podes hacer algo como:

Código:

if (ParamCount = 0) or (ParamStr(1) <> '/ejecutar') Then
Begin
  ImprimirAyuda;
  Halt;
End;
ContinuarEjecucion;

hasta donde yo se, no ha forma de distinguir si el programa es lanzado desde la línea de comandos o desde el GUI... :(

Hasta luego.

;)

craven 17-09-2003 23:42:31

Muchas gracias a ambos por vuestra ayuda. Un saludo.


La franja horaria es GMT +2. Ahora son las 10:41:07.

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