FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hacer una aplicación sin form
Parecerá una pregunta tonta, pero ¿cómo puedo hacer una aplicación sin ningún form?, es porque quiero hacer una aplicación que evite abrir ciertas aplicaciones y no quiero comerme el coco con APIs para que no salga el form en ningún lado....
Otra cosa... ¿cómo crearía los componentes?, digo... quiero poner un TTimer para que me escanee en busca de los Handles de las aplicaciones..., ¿cómo creo el componente?¿cómo me la tengo que montar para poner lo que quiera en OnTimer? Utilizo Delphi 7
__________________
:) |
#2
|
||||
|
||||
Ok... te vas a tener que "romper el coco" manejando una ventana que no sea un TForm... Lo que tienes que hacer es crear un proyecto nuevo, y quitar el formulario, escribir el código directamente en el DPR o parte en el DPR y parte en units.
Te recomiendo buscar info sobre las funciones AllocateHWnd y DeallocateHWnd, en estas funciones tienes el código de como crear una ventana en Windows. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
||||
|
||||
Gracias por tu ayuda, buscaré info sobre eso, si me tropiezo o no encuentro nada, doy un toque
__________________
:) |
#4
|
||||
|
||||
Yo tengo un pequeño ejemplo por aquí lo voy a pegar para que te sirva de punto de partida.
Código:
function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall; // Definimos la variable encargada de procesar los mensajes. begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); If (uMsg = WM_DESTROY) then Halt; // Si damos al boton de la X, la aplicacion termina If (lParam = Buton2) And (uMsg = WM_COMMAND) then begin // Si el mensaje viene del boton y es la pulsacion de este . . . Halt; // Cerramos la Aplicacion. end; If (lParam = Buton1) And (uMsg = WM_COMMAND) then begin // Si el mensaje viene del boton y es la pulsacion de este . . . Longitud := GetWindowTextLength(Edit1); // Averiguamos cual es la longitud del texto de la primera edit GetMem(Sumando1,Longitud+1); // Cogemos memoria para el texto. GetWindowText(Edit1,Sumando1,Longitud+1); // COgemos el texto que hay en el edit y lo almacenamos en la variable Sumando1 Longitud := GetWindowTextLength(Edit2); // Averiguamos cual es la longitud del texto de la segunda edit GetMem(Sumando2,Longitud+1); // Cogemos memoria para el texto. GetWindowText(Edit2,Sumando2,Longitud+1); // Cogemos el texto que hay en el edit y lo almacenamos en la variable Sumando2 Valor := StrToInt(Sumando1) + StrToInt(Sumando2); // Realizamos la suma. SetWindowText(Edit3,Pchar(IntToStr(Valor))); // Ponemos el texto en el edit3 end; end; begin Instancia := hInstance; { Damos a la variable instance, el handle que aplicara windows a nuestro programa } Fuente := CreateFont (-1, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH + FF_DONTCARE, 'MS Sans Serif'); { Creamos la fuente que usaremos en nuestra aplicacion } with Clase do begin // Comenzamos a definir la clase de nuestro programa Style := CS_CLASSDC or CS_PARENTDC; // Definimos el estilo lpfnWndProc := @WindowProc; // La funcion que manejara los mensajes hInstance := Instancia; // La handle de nuestra aplicacion hbrBackGround := Color_btnFace+1; // El color de fondo lpszClassName := 'MrRidk'; // El nombre de la class hCursor := LoadCursor(0, IDC_ARROW); // El cursor que usara nuestra aplicacion end; // Fin RegisterClassA(Clase); // Registramos la clase en windows. Handle := CreateWindowEx(0, 'MrRidk','Ejemplo de Programa Con Api', WS_SYSMENU + WS_VISIBLE, 150, 150, 280, 140, 0, 0, Instancia, Nil); {Creamos la ventana, Estilo, Clase, Titulo, Estilo, Posicion, Tamaño, , El Padre de la ventana, El menu, La hInstance, El lParam.} { ************************************************************************************************************ } Edit1 := CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','3',WS_VISIBLE+WS_CHILD+BS_TEXT,90,10,175,20,Handle,0,Instancia,Nil); {Creamos la ventana, Estilo, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Edit2 := CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','2',WS_VISIBLE+WS_CHILD+BS_TEXT,90,31,175,20,Handle,0,Instancia,Nil); {Creamos la ventana, Estilo, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Edit3 := CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','5',WS_VISIBLE+WS_CHILD+BS_TEXT,90,52,175,20,Handle,0,Instancia,Nil); {Creamos la ventana, Estilo, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Label1 := CreateWindow('Static','Sumando 1:',WS_VISIBLE + WS_CHILD, 10, 16,75,20,Handle,0,Instancia,Nil); {Creamos la ventana, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Label2 := CreateWindow('Static','Sumando 2:',WS_VISIBLE + WS_CHILD, 10, 37,75,20,Handle,0,Instancia,Nil); {Creamos la ventana, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Label3 := CreateWindow('Static','Resultado:',WS_VISIBLE + WS_CHILD, 10, 57,75,20,Handle,0,Instancia,Nil); {Creamos la ventana, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Buton1 := CreateWindow('Button','Sumar', WS_VISIBLE + WS_CHILD, 65, 85, 60, 20, Handle,0,Instancia,Nil); {Creamos la ventana, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } Buton2 := CreateWindow('Button','Salir', WS_VISIBLE + WS_CHILD, 150, 85, 60, 20, Handle,0,Instancia,Nil); {Creamos la ventana, Tipo, Texto, Estilo, Posicion,Tamaño,Padre,Menu,hInstance,El lparam} { ************************************************************************************************************ } SendMessage(Label1,WM_SETFONT,Fuente,Label1); // Ponemos la fuente que antes hemos definido SendMessage(Label2,WM_SETFONT,Fuente,Label1); // Ponemos la fuente que antes hemos definido SendMessage(Label3,WM_SETFONT,Fuente,Label1); // Ponemos la fuente que antes hemos definido SendMessage(Buton1,WM_SETFONT,Fuente,Buton1); // Ponemos la fuente que antes hemos definido SendMessage(Buton2,WM_SETFONT,Fuente,Buton2); // Ponemos la fuente que antes hemos definido SendMessage(Edit1,WM_SETFONT,Fuente,Edit1); // Ponemos la fuente que antes hemos definido SendMessage(Edit2,WM_SETFONT,Fuente,Edit2); // Ponemos la fuente que antes hemos definido SendMessage(Edit3,WM_SETFONT,Fuente,Edit3); // Ponemos la fuente que antes hemos definido while (GetMessage(Mensaje, Handle, 0, 0)) do // Vamos tratando los mensajes. begin TranslateMessage(Mensaje); DispatchMessage(Mensaje); end; end.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
||||
|
||||
Esto debiera de ir al principio, pero lo añado aquí porque al pegar el texto me ha desaparecido el botón de editar el mensaje aún configurando la pantalla a la máxima resolución.
Código:
{Bueno, este ejemplo tratara de mostraros como elaborar una aplicacion sencilla utilizando llamadas a API, para crearla debereis hacer una Console Application y quitar la directiva (*$APPTYPE CONSOLE*) despues añadir a uses Windows y Messages, y el resto lo esplico paso a paso a lo largo del programa. Si bien escribir aplicacion con API es mas complicado tiene la gran ventaja de que los programas son pequeñisimos, Este por ejemplo sin APi serian unos 300 Kb, con API 40 kb ;-)} {Copyright ® MrRidk 2000-2001 All rights reserved} {ridk@hotmail.com -- http://www.mrridk.cjb.net} program Ejemplo_Api; uses Windows, Messages, SysUtils; var Clase: TWndClassA; // Definimos Variables. Mensaje : tmsg; // Definimos la variable del mensaje de windows Label1, Label2, Label3, Edit1, Edit2, Edit3 : Integer; // Definimos variables Buton1, Buton2, Fuente, Handle, Instancia : Integer; // Definimos variables. Sumando1, Sumando2 : Pchar; // Definimos variables. Valor, Longitud : Integer; // Definimos Variables
__________________
Guía de Estilo de los Foros Cita:
|
#6
|
||||
|
||||
Pues creo que te será más sencillo romperte la cabeza para ocultar el form. A fin de cuentas son 2 o tres líneas de código.
// Saludos |
#7
|
||||
|
||||
Pues Bien yo poco un granito de arena:
Si haces un solo TFOrm y este TFOrm lo pones como Visible := False; la aplicacion desaparece de la barra de tareas. ya lo unico que te faltaria seria quitarlo del ctr-alt-supr, este tema ya se ha trataado en ell club asi que tienes como investigar. Nota: Si quieres que te aparezca en la bandeja del sistema, puedes utilizar un componente RX. Suerte
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
|
|
|