Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=26)
-   -   Cojer el foco de la form (https://www.clubdelphi.com/foros/showthread.php?t=94475)

YosvanyRL 27-02-2020 17:10:02

Cojer el foco de la form
 
Hola a todos y que tengan buen dia.
Quisiera saber si el software que estoy usando de delphi al cerrar por ejemplo el explorer y cuando retorno a el nuevamente el podria generar un codigo automaticamente al ponerse en primer plano.
Eso puede ser posible?
:confused:

ecfisa 27-02-2020 17:30:33

Hola.

Realmente no visualizo el problema, por que si llamas al explorer desde tu programa ese sería el comportamiento por defecto, por ejemplo:
Código Delphi [-]
...
begin
  ShellExecute(Handle, 'open', 'c:\windows\explorer.exe','', '', SW_SHOWNORMAL);
al cerrar el explorador de windows el formulario desde donde ejecutaste la línea tomará el foco.


Si el caso fuera otro por favor describe la situación con mas detalle.

Saludos :)

YosvanyRL 27-02-2020 17:42:19

Ok voy a explicar con mas detalles.
Lo que estoy haciendo es lo siguiente:
Yo tengo mi programa abierto, voy a una web especifica donde hago un copy del texto de esa web y despues habro mi programa y doy ctrl V para pegar el texto y el software entonces busca lo que nesesito en el texto.
Y lo que quiero es que cuando mi programa yo lo vuelva a poner en primer plano para trabajar con no tener que hacer Crtl v sino que el texto vaya directamente al memo sin yo tener que pegarlo.
esa es la idea.

ecfisa 27-02-2020 18:03:37

Hola.

No me parece buena idea... pero un modo de forzar lo que deseas es:
Código Delphi [-]
...
uses Clipbrd;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Clipboard.Clear;
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
   Clipboard.Clear;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
   Memo1.Clear;
   Memo1.Text := Clipboard.AsText;
end;
Sin embargo no creo que alterar el comportamiento natural de copiar-pegar sea adecuado.

Saludos :)

YosvanyRL 28-02-2020 00:44:48

Gracias por todo. Voy a probarlo a ver si me funciona como lo necesito.
una vez mas gracias

YosvanyRL 28-02-2020 01:18:59

Me funciona bien pero solo cuando lo minimizo, si no lo minimizo no me funciona.
Y normalmente el siempre debe estar abierto mientras busco online y si lo minimizo pierdo mucho tiempo.
solo hago un cambio de ventanas

ecfisa 28-02-2020 06:58:55

Hola de nuevo.

A ver de este modo entonces...
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FChgHwnd : THandle;
    procedure WMDrawClipboard(var Msg: TMessage) ; message WM_DRAWCLIPBOARD;
    procedure WMChangeCBChain(var Msg: TMessage) ; message WM_CHANGECBCHAIN;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

uses  Clipbrd;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Clipboard.Clear;
  FChgHwnd := SetClipboardViewer(Handle) ;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  ChangeClipboardChain(Handle, FChgHwnd) ;
end;

//----------------------------------------------------------------------------

procedure TForm1.WMChangeCBChain(var Msg: TMessage);
begin
  if FChgHwnd = Msg.WParam then
    FChgHwnd := Msg.LParam
  else if FChgHwnd <> 0 then
    SendMessage(FChgHwnd, WM_CHANGECBCHAIN, Msg.WParam, Msg.LParam);
end;

procedure TForm1.WMDrawClipboard(var Msg: TMessage);
begin
  if Clipboard.HasFormat(CF_TEXT) then
  begin
   Memo1.Lines.Clear;
   Memo1.Text := Clipboard.AsText;
  end;
  if FChgHwnd <> 0 then
   SendMessage(FChgHwnd, WM_DRAWCLIPBOARD, 0, 0)
end;

end.

Saludos :)

YosvanyRL 03-03-2020 23:56:14

Voy a probarlo ahora. Hace rato no tenia tiempo de sentarme en la PC con el trabajo.
Lo pruebo y te digo.

muchisimas gracias y disculpa la demora

YosvanyRL 21-03-2020 11:59:10

Disculpa que no he respondido aun. es con el trabajo no he tenido tiempo de volverme a sentar en la computadora para probarlo. pero hoy si Dios me lo permite lo voy a hacer.
muchisimas gracias

YosvanyRL 21-03-2020 17:52:47

Disculpa mi ignorancia pero podrias explicarme un poquito mejor todos esos codigos y como hacerlo pues hay algunos que no se como ponerlos en mi unit.:o

ecfisa 22-03-2020 04:41:27

Hola.

Debes tener un TForm con un TMemo que será quién reciba el texto copiado en el portapapeles, también debes incluir la unidad Clipbrd en la parte de interface o implementation.
Las cabeceras de los métodos OnCreate y OnDestroy del formulario son generados desde el Object Inspector de forma visual por Delphi, copia el código correspondiente en cada uno.
La variable privada FChgHwnd y las definiciones de los métodos privados WMDrawClipboard y WMChangeCBChain debes copiarlos tal como estan en la parte private de tu TForm.
Estando al final del segundo método presionar la secuencia de teclas Ctrl+Shift+C para que Delphi te genere automáticamente las cabeceras por último copia el código que corresponda a cada uno de ellos.

El funcionamiento está basado en enviar y escuchar mensajes hacia y desde el portapapeles, te pongo unos enlaces a documentación:El código es muy conocido y vas a encontrar muchas variantes y explicaciones navegando.

Saludos. :)

YosvanyRL 22-03-2020 14:04:37

Muchisimas gracias por responder y ayudarme. Que Dios Bendiga tu sabiduria y en todas las areas de tu vida.
Y gracias a este club maravilloso en donde simpre hay respuesta para todo.
Que Dios los Bendiga


La franja horaria es GMT +2. Ahora son las 05:45: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