Параметры функции FindWindow. Не могу определить класс формы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Параметры функции FindWindow. Не могу определить класс формы

Сообщение Alexey_02 » 26.02.2010 23:09:46

Разбираюсь с книгой Краснова OpenGL в Delphi.
Возникли следующие проблемы.
Вот проект: http://webfile.ru/4325292. А это его код:
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, LResources, FileUtil;
type

  { TForm2 }

  TForm2 = class(TForm)
    Button1: TButton;
  procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form2: TForm2;

implementation

procedure TForm2.Button1Click(Sender: TObject);
var
  H : HWND; // ссылка на окно
begin
H := FindWindow (nil, 'Form1'); // ищем окно
//  H := FindWindow ('TForm1', 'Form1'); // ищем окно
//  H := FindWindow (PChar(UTF8ToSys('TForm1')), 'Form1');
If H <> 0 then ShowMessage ('Есть Form1! Значение H=' + floattostr(h)) // окно найдено
else ShowMessage ('Нет Form1! Значение H='+ floattostr(h));  // окно не найдено
end;

initialization
  {$I unit1.lrs}

end.

Открываю Lazarus жму F9. Создается форма с с Caption равным Form1.
Код этой "формы"
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs;

type
  TForm1 = class(TForm)
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

initialization
  {$I unit1.lrs}

end.


Запускаю свой проект.
У меня он находит форму с надписью Form1 только при первой красной строке.
H := FindWindow (nil, 'Form1'); // ищем окно
// H := FindWindow ('TForm1', 'Form1'); // ищем окно
// H := FindWindow (PChar(UTF8ToSys('TForm1')), 'Form1');


Аргументы функции - класс окна и его заголовок
Т.е. параметр класса я ставлю без разницы какой (nil).
Код: Выделить всё
H := FindWindow (nil, 'Form1');

В книге же работает 2 строка,
выделенная красным цветом. у меня же только первая с параметром nil почему? что почитать? Как узнать к какому классу относиться эта Form1?
третья красная тоже не работает :( Не находят окно с надписью Form1 .
Alexey_02
новенький
 
Сообщения: 21
Зарегистрирован: 15.02.2010 15:51:36

Re: Параметры функции FindWindow. Не могу определить класс формы

Сообщение coyot.rush » 26.02.2010 23:43:43

Функция FindWindow
Описание:
function FindWindow(ClassName, WindowName: PChar): HWnd;
Находит pодительское окно веpхнего уpовня с совпадающими ClassName и WindowName. Не осуществляет поиск дочеpних окон.
Параметры:
ClassName: Имя класса окна (заканчивающееся пустым символом, nil - если все классы).
WindowName: Текстовый заголовок окна или 0, если все окна.
Возвpащаемое значение:
Описатель окна; 0 - если такого окна нет.


Как узнать к какому классу относиться эта Form1?

отладчиком ollydbg :!:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Параметры функции FindWindow. Не могу определить класс формы

Сообщение Sergei I. Gorelkin » 26.02.2010 23:55:45

Почти все окна, создаваемые LCL, принадлежат одному и тому же классу с именем "Window". Это отличается от Delphi, у которого каждый оконный контрол имеет имя класса, совпадающее с дельфевым классом.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Параметры функции FindWindow. Не могу определить класс формы

Сообщение Alexey_02 » 27.02.2010 02:00:08

Спасибо, Sergei I. Gorelkin. Помогло.
coyot.rush ollydbg - это что-то очень мощное (всмысле чтобы им пользоваться, надо много еще чего знать), с чем надо разбираться. Почитал про него им еще и программы ломают. Не моего уровня птица. Мне с FPC+Lazarus разобраться бы.
Alexey_02
новенький
 
Сообщения: 21
Зарегистрирован: 15.02.2010 15:51:36


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 57

Рейтинг@Mail.ru