Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 21
craven Va por buen camino
Question 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.
__________________
craven
Responder Con Cita
  #2  
Antiguo 17-09-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 17-09-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 18-09-2003
craven craven is offline
Miembro
 
Registrado: may 2003
Posts: 78
Poder: 21
craven Va por buen camino
Muchas gracias a ambos por vuestra ayuda. Un saludo.
__________________
craven
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:52:23.


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
Copyright 1996-2007 Club Delphi