Allora, prendila con le pinze, perché questo è un metodo che ho trovato da solo, e non so se è proprio "ortodosso".
Quando trovo del codice su internet specifico per delphi, che Lazarus non compila, la prima cosa che faccio è crearmi un sorgente come questo
unit <metti qui il nome che vuoi>;
{$mode Delphi}{$H+}
interface
uses
<metti qui quelle che ti servono>;
function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
implementation
function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var
szFull: array[0..MAX_PATH] of Char; //Buffer for window caption
begin
Result := Wnd <> 0;
if Result then
begin
GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer
if (Pos(SL[0], StrPas(szFull)) > 0) // Test for text
and (SL.IndexOfObject(TObject(Wnd)) < 0) // Test for duplicate handles
then SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list
EnumChildWindows(Wnd, @EnumChildProc, int64(SL)); //Recurse into child windows
end;
end;
end.
Lo salvo in un file con estensione ".pas" e lo aggiungo alle uses del mio progetto.
Se così compila, lo tengo così.
La differenza la fa la 3^ riga: "{$mode Delphi}{$H+}"
Nei sorgenti di Lazarus, al posto di quello, trovi "{$mode objfpc}{$H+}".
Se non ricordo male, quelle 2 direttive dicono al compilatore se deve usare le regole di FreePascal, che sono un po' più restrittive in alcuni casi, o quelle di Delphi
Ciao, Mario