Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы и WinAPI, связать вместе 
V
    Опции темы
dvamaster
  Дата 25.3.2010, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



Доброго времени суток!!!

есть класс который создает поток.
в потоке создается и обрабатывается окно

как передать класс в процедуру окна

Код

FThread := CreateThread(nil, 0, @MainWndThreadProc, Pointer(Self), CREATE_SUSPENDED, FThreadId);


здесь класс прекрасно передается в MainWndThreadProc

Код

function MainWndThreadProc(ASelf: TMainWndPlugin):DWORD; stdcall;
var
  wc: WNDCLASS;
  mess: MSG;
begin
  Result := 0;
  wc.style := CS_HREDRAW or CS_VREDRAW;
  wc.lpfnWndProc := @MainWndProc;
  wc.cbClsExtra := 0;
  wc.cbWndExtra := 0;
  wc.hInstance := HInstance;
  wc.hIcon := LoadIcon(0, IDI_APPLICATION);
  wc.hCursor := LoadCursor(0, IDC_ARROW);
  wc.hbrBackground := COLOR_WINDOW;
  wc.lpszMenuName := nil;
  wc.lpszClassName := @szMainWndClass;
  if Windows.RegisterClass(wc) = 0 then
      Exit;
  ASelf.FMainWnd := CreateWindow(@szMainWndClass,
    @szCaption,
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT,
    GetDesktopWindow,
    0,
    HInstance,
    nil); // <---- вот сюда пытаюсь передать класс (Pointer(ASelf) или @ASelf)
  if ASelf.FMainWnd = 0 then
    Exit;
  ShowWindow(ASelf.FMainWnd, CmdShow);
  UpdateWindow(ASelf.FMainWnd);
  while GetMessage(mess, 0, 0, 0) do
    begin
      TranslateMessage(mess);
      DispatchMessage(mess)
    end;
  ASelf.FCore.TerminateApplication
end;


там где помечено пытаюсь передать класс и как Pointer(ASelf), и как @ASelf
без разницы, переменная LPARAM в оконной процедуре (MainWndProc)
указывает на непонятный адрес, причем с одним и тем же значением.

так же пробовал передать через SetWindowLong и SetWindowLongPtr, не помогает.

Как сохранить в окне класс?


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
bems
Дата 25.3.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Правильно Pointer(ASelf). И указатель будет доступен в оконной процедуре при получении сообщения WM_CREATE.
Код

PCreateStruct(lParam).lpCreateParams



--------------------
Обижено школьников: 8
PM MAIL   Вверх
dvamaster
Дата 29.3.2010, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 559
Регистрация: 30.6.2004
Где: Россия : Курган

Репутация: 2
Всего: 10



 smile точно, я и забыл про структуру TCreateStruct


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0719 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.