Вопрос про Win API-функции

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

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

Вопрос про Win API-функции

Сообщение Climber » 25.03.2009 16:07:23

Не знаю, где надо стпрашивать - здесь или в подфоруме Free Pascal Compiler.
Есть такой код:
Код: Выделить всё
TMainForm = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
end;

var
  MainForm: TMainForm;

implementation

procedure TMainForm.Button1Click(Sender: TObject);
var
  WinClass: array[0..255] of Char;
begin
  GetClassName(MainForm.Handle, WinClass, SizeOf(WinClass));
  ShowMessage('Класс окна: '+WinClass);
end;
После нажатия на кнопку появляется сообщение: "Класс окна: Window".
Есть мнение, и не только мое, что функция GetClassName должна была тут вернуть "TMainForm". Это Lazarus виноват или что (кто)?
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Вопрос про Win API-функции

Сообщение Павел Ишенин » 25.03.2009 17:07:15

Мнение неправильное :) Класс выдается окна а не контрола. Используйте MainForm.ClassName.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Вопрос про Win API-функции

Сообщение Climber » 26.03.2009 01:05:52

А вот и нет!
Я немного модифицировал (но не принципиально) одну строчку:
Код: Выделить всё
GetClassName(GetActiveWindow, WinClass, SizeOf(WinClass));

Так как мое окно активно в момент нажатия на кнопку, то все должно быть нормально.
Участники соревнований: Lazarus 0.9.26, Delphi 2007. Ответ первого - Window, второго - TMainForm.
На самом деле, мне нужно перечисление классов всех запущенных окон (через EnumWindows), чтобы некоторые отслеживать. Так вот меня просто смутило то, как программа опознала сама себя, но это в моем случае не важно.
Ушел думать...
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Вопрос про Win API-функции

Сообщение Alexx2000 » 26.03.2009 11:10:25

Climber писал(а):После нажатия на кнопку появляется сообщение: "Класс окна: Window".
Есть мнение, и не только мое, что функция GetClassName должна была тут вернуть "TMainForm". Это Lazarus виноват или что (кто)?

Да виноват Lazarus, он при создании всех окон использует имя класса окна "Window", Delphi устанавливает имя класса в соответствие с именем класса формы.
Это создает проблемы, если необходимо использовать определенное имя класса для окна. Может кто подскажит как решить такую проблему?
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Вопрос про Win API-функции

Сообщение Павел Ишенин » 26.03.2009 19:40:58

Что дает регистрация нового класса окна windows полезного кроме идентификации по имени класса в delphi?
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Вопрос про Win API-функции

Сообщение Михаил Крамер » 27.03.2009 17:12:35

А кто мешает LCL изменить под себя? Тем более, по-моему, изменение имени класса сильно не скажется на работоспособности.
Михаил Крамер
новенький
 
Сообщения: 73
Зарегистрирован: 08.02.2008 14:26:40

Re: Вопрос про Win API-функции

Сообщение Павел Ишенин » 27.03.2009 21:06:24

Если это нужно для каких-либо целей кроме как идентификации по имени класса - это не сложно добавить в LCL, но только ради идентификации мне кажется не стоит.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Вопрос про Win API-функции

Сообщение Alexx2000 » 28.03.2009 14:32:44

Мне например это нужно для более полной поддержки плагинов от Total Commander. Дело в том что некоторые плагины выполняют поиск окна главной программы по имени класса окна, и не находя его либо работают со сбоями, либо вообще не работают.
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 488
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Вопрос про Win API-функции

Сообщение Climber » 30.03.2009 10:40:07

А мне вообще не нужно, я просто так спросил 8)
Кстати, после нескольких месяцев ковыряния в лазарусе запустил Delphi 2007, потыркался... Не понравилось, тупой он какой-то. Компонентов много, а току мало, лазарус приятнее 8)
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru