![]() |
![]() |
![]() |
![]() |
![]() |
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 |
#8
|
||||
|
||||
eduarcol, en Delphi5 yo ponía mi aplicación como Visible := False y me aparecía un rectángulo de unos 2 cm de ancho y 6 de largo...
__________________
:) |
#9
|
||||
|
||||
en donde aparecia ese rectangulo??, y no es la aplicacion es el formulario unico y principal. te aseguro que si funciona por qe yo lo tengo asi precisamente en delphi 5
__________________
...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 |
#10
|
||||
|
||||
Jeje, pues a mí no me iba. Al referirme a aplicación he querido decir Form. Pero bueno... tampoco es que me vaya a comer mucho la cabeza con el visible. Por cierto... he buscado lo de cambiar lo de Registered User y ahora no se dónde está... me parece que han cambiado la localización...
Gracias marcoszorrilla por tu código... aunque para esta aplicación voy a ocultar el form ( :d ), voy a examinar mientras tanto tu código... a ver si aprendo algo más.
__________________
:) |
#11
|
||||
|
||||
Cita:
Cita:
por fin en que queda sirvio o no ![]()
__________________
...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 |
#12
|
||||
|
||||
Dije iba porque no lo he vuelto a probar (estaba en linux... y no tengo kylix... aún...), pero ahora ya estoy en Gate's OS y voy a probarlo
__________________
:) |
#13
|
||||
|
||||
Gracias eduarcol, no me funcionaba porque ponía el visible := false en el Object Inspector, pero ahora he colado el código en un botón y tira perfectamente
![]()
__________________
:) |
#14
|
||||
|
||||
Agrego algo:
Una pequeña ventaja, al crear una aplicación sin la unit Forms, es que el EXE final será mucho mas pequeño que si la incluyes. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. ![]() |
![]() |
|
|
![]() |
|