Una funcion de delphi sin equivalente en lazarus
#1
Escrito 18 enero 2011 - 06:29
Application.HookMainWindow, Application.UnHookMainWindow y Application.Handle
trabajan asi:
en un boton:
Application.HookMainWindow(LaFuncion);
Connect(Application.Handle);
en otro:
Application.UnHookMainWindow(LaFuncion);
He buscado en todos lados y nada, alguien me diga si se puede hacer algo para solucionarlo, o mejor sigo en delphi asta que algun dia lazarus tenga el nivel necesario,
La otra pregunta, no consigo componentes , es que no hay componentes? o muy pocos, me gustaria conectar con el puerto serie, hacer graficos etc etc espero no haberlos molestado.
#2
Escrito 18 enero 2011 - 06:49
Se me dio por jugar con lazarus es solo por deporte que decidi migrar una aplicacion que tengo para ver hasta donde puedo llegar, y cuando ya casi casi casi estaba todo listo ya llegando a la meta en la ultima parte, tengo tres funciones que no tienen forma de hacerlas trabajr por que no existen:
Application.HookMainWindow, Application.UnHookMainWindow y Application.Handle
trabajan asi:
en un boton:
Application.HookMainWindow(LaFuncion);
Connect(Application.Handle);
en otro:
Application.UnHookMainWindow(LaFuncion);
He buscado en todos lados y nada, alguien me diga si se puede hacer algo para solucionarlo, o mejor sigo en delphi asta que algun dia lazarus tenga el nivel necesario,
La otra pregunta, no consigo componentes , es que no hay componentes? o muy pocos, me gustaria conectar con el puerto serie, hacer graficos etc etc espero no haberlos molestado.
Detalle: Lazarus es una "encarnación" de ObjectPASCAL que NO TRABAJA con sistemas operativos propietarios, es decir, si tienes tu aplicación hecha en Delphi y por ende, para Windows es perfectamente normal usar el API de Windows como en el caso que presentas. Pero como las aplicaciones hechas en Lazarus corren en Linux, en Mac y en Windows, y en cada uno de éstos sistemas operativos el "hook" cambia, no existe o no se usa, pues entonces por eso no lo puedes acceder.
Mal asunto si tienes una aplicación que use muchos "hooks"..., por que no podrás portarla a Lazarus.
#3
Escrito 18 enero 2011 - 07:25
var PrevWndProc: WNDPROC; ... function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam):LRESULT; stdcall; begin if uMsg=WM_NCHITTEST then begin result:=Windows.DefWindowProc(Ahwnd, uMsg, WParam, LParam); //not sure about this one if result=windows.HTCAPTION then result:=windows.HTCLIENT; exit; end; result:=CallWindowProc(PrevWndProc,Ahwnd, uMsg, WParam, LParam); end; //install our message handler procedure TForm1.FormCreate(Sender: TObject); begin PrevWndProc:=Windows.WNDPROC(SetWindowLong(Self.Handle,GWL_WNDPROC,PtrInt(@WndCallback))); end;
Pero no se si pueda usarlo ya que no lo entiendo.
#4
Escrito 19 enero 2011 - 06:33
Si dices que pretendes lograr quizas algun experto en lazarus pueda ayudarte
#5
Escrito 19 enero 2011 - 06:46
Asi que no importa la compatibilidad necesito que me funcione para hacer pruebas con lazarus.
#6
Escrito 19 enero 2011 - 08:15
{$IFDEF WIN32}
{$ENDIF}
Si es en Linux:
{$IFDEF Linux}
{$ENDIF}
Y así sucesivamente, ahora, debes confirmar si tienes agregada la unidad Windows que es donde reside la API de windows.
Saludos.
#7
Escrito 19 enero 2011 - 08:20
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FileUtil, LResources, Buttons;
#8
Escrito 19 enero 2011 - 08:27
La otra pregunta, no consigo componentes [img alt=]http://www.delphiaccess.com/forum/Smileys/MSN/04.gif[/img] , es que no hay componentes? o muy pocos, me gustaria conectar con el puerto serie, hacer graficos etc etc [img alt=(y)]http://www.delphiaccess.com/forum/Smileys/MSN/17.gif[/img] espero no haberlos molestado.
Ninguna molestia mikrosurfer, al contrario esperemos poderte ayudar, si buscas componentes gráficos, prueba descargando CodeTyphon, es una distribución de Lazarus y FPC, con componentes extras muy útiles, lo he probado en windows que en la distribución normal no figuran.
Link: http://www.pilotlogic.com/sitejoom/index.php?option=com_content&view=article&id=96&catid=68&Itemid=147
#9
Escrito 19 enero 2011 - 08:39
#10
Escrito 19 enero 2011 - 08:49
Que tal este ejemplo que saque de la wiki de lazarus:
delphi
var PrevWndProc: WNDPROC; ... function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam):LRESULT; stdcall; begin if uMsg=WM_NCHITTEST then begin result:=Windows.DefWindowProc(Ahwnd, uMsg, WParam, LParam); //not sure about this one if result=windows.HTCAPTION then result:=windows.HTCLIENT; exit; end; result:=CallWindowProc(PrevWndProc,Ahwnd, uMsg, WParam, LParam); end; //install our message handler procedure TForm1.FormCreate(Sender: TObject); begin PrevWndProc:=Windows.WNDPROC(SetWindowLong(Self.Handle,GWL_WNDPROC,PtrInt(@WndCallback))); end;
Pero no se si pueda usarlo ya que no lo entiendo.
Este código lo que hace es que te da la opción de mover el programa en cualquier parte del formulario sin limitarse en el caption, pero quisiera preguntar qué clase de Hook intentas hacer.
Saludos.
#11
Escrito 19 enero 2011 - 09:11
#13
Escrito 19 enero 2011 - 11:30