Ir al contenido


Foto

Una funcion de delphi sin equivalente en lazarus


  • Por favor identifícate para responder
12 respuestas en este tema

#1 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 18 enero 2011 - 06:29

Se me dio por jugar con lazarus  :o 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, ^o|
La otra pregunta, no consigo componentes  :p , es que no hay componentes? o muy pocos, me gustaria conectar con el puerto serie, hacer graficos etc etc  (y) espero no haberlos molestado.


  • 0

#2 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 18 enero 2011 - 06:49

Se me dio por jugar con lazarus  :o 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, ^o|
La otra pregunta, no consigo componentes  :p , es que no hay componentes? o muy pocos, me gustaria conectar con el puerto serie, hacer graficos etc etc  (y) 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.
  • 0

#3 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 18 enero 2011 - 07:25

Que tal este ejemplo que saque de la wiki de lazarus:


delphi
  1. var
  2.   PrevWndProc: WNDPROC;
  3. ...
  4. function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam):LRESULT; stdcall;
  5. begin
  6.   if uMsg=WM_NCHITTEST then
  7.   begin
  8.     result:=Windows.DefWindowProc(Ahwnd, uMsg, WParam, LParam);  //not sure about this one
  9.     if result=windows.HTCAPTION then result:=windows.HTCLIENT;
  10.     exit;
  11.   end;
  12.   result:=CallWindowProc(PrevWndProc,Ahwnd, uMsg, WParam, LParam);
  13. end;
  14.  
  15. //install our message handler
  16. procedure TForm1.FormCreate(Sender: TObject);
  17. begin
  18.   PrevWndProc:=Windows.WNDPROC(SetWindowLong(Self.Handle,GWL_WNDPROC,PtrInt(@WndCallback)));
  19. end;



Pero no se si pueda usarlo ya que no lo entiendo.
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 19 enero 2011 - 06:33

Igual amigo, lo que te quiso decir Felipe es que esas funciones solo trabajaran cuando estes en windows, lo que haces es quitarle portabilidad a tus aplicaciones.

Si dices que pretendes lograr quizas algun experto en lazarus pueda ayudarte
  • 0

#5 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 19 enero 2011 - 06:46

No necesito compatibilidad, es algo que estoy haciendo para aprender no para distribuir, lo que yo quiero hacer esta hecho en lazarus para linux pero por compatibilidad no se puede pasar a windows.

Asi que no importa la compatibilidad necesito que me funcione para hacer pruebas con lazarus.  ;)
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 enero 2011 - 08:15

Tal como comentan los demás compañeros, para ser usado en Windows debes encerrar la función entre:

{$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.
  • 0

#7 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 19 enero 2011 - 08:20

Tengo definidas estas unidades:

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FileUtil, LResources, Buttons;
  • 0

#8 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 19 enero 2011 - 08:27

La otra pregunta, no consigo componentes  [img alt=:p]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

  • 0

#9 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 19 enero 2011 - 08:39

Gracias fredycc, una cosa: pesa 220 megas? por que tanto?
  • 0

#10 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 enero 2011 - 08:49

Que tal este ejemplo que saque de la wiki de lazarus:


delphi
  1. var
  2.   PrevWndProc: WNDPROC;
  3. ...
  4. function WndCallback(Ahwnd: HWND; uMsg: UINT; wParam: WParam; lParam: LParam):LRESULT; stdcall;
  5. begin
  6.   if uMsg=WM_NCHITTEST then
  7.   begin
  8.     result:=Windows.DefWindowProc(Ahwnd, uMsg, WParam, LParam);  //not sure about this one
  9.     if result=windows.HTCAPTION then result:=windows.HTCLIENT;
  10.     exit;
  11.   end;
  12.   result:=CallWindowProc(PrevWndProc,Ahwnd, uMsg, WParam, LParam);
  13. end;
  14.  
  15. //install our message handler
  16. procedure TForm1.FormCreate(Sender: TObject);
  17. begin
  18.   PrevWndProc:=Windows.WNDPROC(SetWindowLong(Self.Handle,GWL_WNDPROC,PtrInt(@WndCallback)));
  19. 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.
  • 0

#11 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 19 enero 2011 - 09:11

Es que se trata de capturar los eventos producidos por windows relacionados con hardware USB HID, la otra obcion es utilizar el componente USB HID de la libreria JEDY, pero no se como pasarla a lazarus. Tambien me gustaria convertir la libreria de http://sourceforge.n...ojects/comport/ pero tampoco sabria por donde comenzar, y como se trata de modificar componentes la cosa toma otro nivel mas alto.
  • 0

#12 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 19 enero 2011 - 09:22

http://wiki.lazarus....s_from_JEDI-SDL
  • 0

#13 mikrosurfer

mikrosurfer

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 155 mensajes

Escrito 19 enero 2011 - 11:30

:cheesy: Gracias enecuneme, esa libreria si que la necesito  (y)
  • 0




IP.Board spam blocked by CleanTalk.