Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Componentes sin form. (https://www.clubdelphi.com/foros/showthread.php?t=58652)

rauros 27-07-2008 21:14:05

Componentes sin form.
 
Saludos. Me gustaría hacer algo muy simple pero no sé si posible es. Necesito un edit(componente) pero sin form. O un form invisible con un edit visible. O algo parecido.

dec 27-07-2008 21:21:22

Hola,

Igual la función "InputBox()" puede servirte.

rauros 27-07-2008 21:24:32

No, gracias por ayudar pero no era eso lo que busco. Busco algo que sea solo un edit. Un edit y ya está xD. Más solo que la una.

dec 27-07-2008 21:26:35

Hola,

Pues, ignoro si puedes mostrar un "TEdit" solo, aunque, quizás apoyándote en alguna ventana, incluso en la del propio escritorio de Windows... la verdad es que no sabría qué decirte. Pero, ¿por qué no usar un formulario, que sólo contenga el "TEdit"? Creo que esto sería una posibilidad, ¿no? ¿tú cómo lo ves? ;)

rauros 27-07-2008 21:27:55

Me interesa eso de "apoyarme" en una ventana. Si tengo el handle, es suficiente?

coso 27-07-2008 21:35:05

Hola rauros, puedes probar de crear un form con un edit, y autosize del form a true, borderstyle = bsnone

rauros 27-07-2008 21:43:35

anda, gracias.

Caral 27-07-2008 21:46:51

Hola
Bueno, no se puede esperar mucho de un novato:D
Un Edit solito, sin nada, ojo sin nada osea que no se puede cerrar, solo desde la barra de tareas, creo.:D
Saludos

dec 27-07-2008 21:49:16

Hola,

La verdad es que me meto en camisas de once varas. Por ejemplo, he hablado de "apoyarse" en una ventana, pero, con la función CreateWindow() es posible crear un "Edit" (ojo, ya no un "TEdit") más o menos sencillamente, y sin necesidad de apoyarse en ventana alguna. Sin embargo, he creado un "Edit", pero, habría que ver de qué manera es posible hacerse con su control: saber qué texto se ha escrito, cuándo ha cambiado, etc., etc. Y, lo cierto es que yo no estoy muy puesto en estos asuntos, que son "pegarse" con el API de Windows directamente. Igual algún otro compañero puede echarte una mano, para lo dicho, o con alguna otra idea que solucione lo que quieres. Lo lamento. :(

rauros 27-07-2008 21:52:36

Tranquilos, el edit sin bordes me sobra. Ahora me gustaría hacer como si fuera ligado a una aplicación. Por ejemplo, si va con notepad, significa que si notepad está en 1ª posición (delante de el resto de ventanas) el edit vaya también a la 1ª con el notepad.

dec 27-07-2008 21:56:39

Hola,

Joroba, estuvo buena esa Caral. ;)

Caral 27-07-2008 21:59:16

Hola
Gracias Dec, pero es sacado de aqui mismo, del club.:D
Algo he aprendido.:)
Saludos

coso 27-07-2008 22:02:18

hola rauros, puedes poner la form en StayOnTop si se encuentra la ventana del notepad activa, aunque ten en cuenta que si se entra a tu miniedit :D el notepad perdera el foco

Neftali [Germán.Estévez] 28-07-2008 08:47:38

Tal soy demasiado básico (todavía ando dormido), pero ¿no bastaría con hacer un form igual de grande que el edit y colocarle dentro el Edit?

Formulario con BorderStyle a bsNone y Autosize a True.

rauros 28-07-2008 12:07:15

Cita:

Empezado por coso (Mensaje 303620)
hola rauros, puedes poner la form en StayOnTop si se encuentra la ventana del notepad activa, aunque ten en cuenta que si se entra a tu miniedit :D el notepad perdera el foco

¿Eso significa que todas las teclas que use en vez de funcionar en el notepad funcionará en mi programa? Es que hay programas que están visibles pero no reciben el foco, como el administrador de tareas, greatis windowse, etc...
Por ejemplo, yo estoy escribiendo ahora mismo por aquí y tengo el administrador de tareas en medio, lo que significa que no recibe el foco, ¿no?
Muchas gracias a todos, que me habéis ayudado.

coso 28-07-2008 12:10:03

no se bien bien como iria, pero seguro que deberas vigilar el tema del foco de la aplicación, pues es posible que te vaya saltando de una a otra. Mira por aqui el club algunos ejemplos (por ejemplo, lo de enviar teclas a aplicaciones externas) a ver como funciona y como lo resuelven...saludos

Cita:

y tengo el administrador de tareas en medio, lo que significa que no recibe el foco, ¿no?
si, significa que no tiene el foco en ese momento, funciona en background que se dice

rauros 28-07-2008 17:45:09

He puesto formStyle en fsStayOnTop pero no funciona, al clicar en otra aplicación el edit se queda detrás...

coso 28-07-2008 18:30:38

? que raro, yo lo tengo ahora mismo delante, y solo he hecho esto desde un nuevo proyecto: borderstyle := bsNone, autosize := true, formstyle := fsStayOnTop :confused:

coso 28-07-2008 18:31:45

a ver si es que la otra aplicación tambien tiene el fsstayontop...

rauros 29-07-2008 12:41:54

No se que ocurrio pero se solucionó. Ahora tengo otra pregunta, como puedo hacer que al clicar una secuencia de botones (alt + c, por ejemplo), el programa reciba el foco. Lo de la secuencia debe hacerse aunque el programa no tenga el foco, por eso pregunto, que no tengo ni idea de si se puede hacer.

Neftali [Germán.Estévez] 29-07-2008 13:21:46

Debes registrar esa combinación de teclas de forma global a sistema.
Aquí tienes el código de cómo hacerlo.

cmm07 29-07-2008 17:21:16

en los componentes JVCL creo que ví un componente que hace eso...

rauros 29-07-2008 22:08:02

Ese código no me funciona. Está copiado tal cual.

Neftali [Germán.Estévez] 30-07-2008 09:05:06

Cita:

Empezado por rauros (Mensaje 304231)
Ese código no me funciona. Está copiado tal cual.

Puedes explicar mejor qué te pasa. ¿Porqué no te funciona? ¿No te compila?

RegisterHotKey
es la llamada que se utiliza para
registrar combinaciones de teclas a nivel Global del sistema. Funciona perfectamente (yo mismo la he utilizado varias veces sin problemas).

Busca sobre esa llamada y encontrarás muchos ejemplos, aunque las llamadas son similares a esa.

rauros 30-07-2008 14:11:17

Nada más copiar el proyecto a la unidad 1 (unit1.pas) y compilar. Luego clico el botón imprimir Pantalla (una de las registradas) pero no funciona.

sur-se 30-07-2008 16:12:40

Eso lo puedes hacer con el componente HotKeyManager.
http://www.vclcomponents.com/Delphi/...ager-info.html
Un saludo.

Neftali [Germán.Estévez] 30-07-2008 16:32:08

Cita:

Empezado por sur-se (Mensaje 304370)
Eso lo puedes hacer con el componente HotKeyManager.

Se puede hacer con muchos más componentes además de ese, pero creo que no radica ahí el problema, ya que si miras el código del procedimiento AddHotKey del componente verás que acaba llamando a las funciones:

* GlobalAddAtom
* RegisterHotKey

Que son las mismas que se llaman en el ejemplo anterior.
Supongo que si no han funcionado antes...

coso 30-07-2008 16:46:05

{
RegisterHotKey fails if the keystrokes specified for the hot key have
already been registered by another hot key.

Windows NT4 and Windows 2000/XP: The F12 key is reserved for use by the
debugger at all times, so it should not be registered as a hot key. Even
when you are not debugging an application, F12 is reserved in case a
kernel-mode debugger or a just-in-time debugger is resident.
}

esto estaba alla en la funcion. ¿Es posible que sea lo que te esta ocurriendo?

rauros 30-07-2008 16:47:49

Pues sí. Ahora va xD.

sur-se 30-07-2008 17:53:24

Bueno pues ahí pongo otra solución sin usar componentes externos como sugiere Neftali:

Código:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure HtoK(var Msg : TWMHotKey); message WM_HotKey;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
implementation
 
{$R *.dfm}
 
procedure tform1.HtoK(var Msg : TWMHotKey);
begin
showmessage('Alt-V');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  registerHotKey(handle,GlobalAddAtom('ALT_V'),MOD_ALt,vKKeyscan('v'));
 
end;
 
end.

Un saludo.

coso 30-07-2008 20:00:11

Si, bueno, sur-se, eso es exactamente el codigo de neftali, pero incorrecto...¿deberas desregistrarlas al acabar la aplicación no?

coso 30-07-2008 20:04:16

y...el componente externo lo has citado tu...

sur-se 31-07-2008 08:22:51

Efectivamente, un poco más resumido que el código de neftalí, y más sencillo de entender al tener menos código. Si al final faltaría desregistrar, pero es básicamente un ejemplo de esqueleto para hacerlo.

Respecto al componente, efectivamente lo puse yo porque es una solución muy sencilla (haga lo que haga internamente) que encapsula todo. Era por si le servía al compañero que puso el post, nada más. Yo lo utilizo porque me ahorra escribir código nada más.

Un saludo.

coso 31-07-2008 08:51:44

si si, claro, efectivamente...


La franja horaria es GMT +2. Ahora son las 18:08:51.

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