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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Борландовские сообщения в API без VCL, CM_MOUSEENTER и CM_MOUSELEAVE 
:(
    Опции темы
Dmitry_177
Дата 26.9.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите пожалуйста как определять Борландовские сообщения CM_MOUSEENTER и CM_MOUSELEAVE в API? Т.е. их аналог? Просто эти сообщения посылоются при использовании VCL, а если на чистом API? Как ловить эти события?
PM MAIL   Вверх
Snowy
Дата 27.9.2006, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



В винапи нет такого аналога.
И эти сообщения тоже не генерируются.
Их создаёт TApplication искуственно - анализирует положение мышки при простое.
PM MAIL   Вверх
Dmitry_177
Дата 27.9.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



При каждом перемещении мышки WM_MOUSEMOVE проверяет положение курсора???

Добавлено @ 00:06 
т.е. он находится над курсором или нет... я правильно понял?
PM MAIL   Вверх
Romikgy
Дата 27.9.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



имхо обрабатывать WM_MOUSEMOVE

Добавлено @ 00:07 
Цитата(Dmitry_177 @  26.9.2006,  23:05 Найти цитируемый пост)
я правильно понял?

да


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 27.9.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Нет. Он помнит последние координаты мыши.
Если в очереди нет сообщений, то Application включает холостой ход - занимается чем попало (OnIdle). 
В том числе проверяет, а не изменились ли координаты мыши, а тот же контрол под мышей или уже нет...

Добавлено @ 00:16 
Если анализировать WM_MOUSEMOVE, то не узнаешь, что мыш ушла за форму.
Если мыша не над формой, то нет никаких сообщений.
PM MAIL   Вверх
Romikgy
Дата 27.9.2006, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Snowy, дык че если повесить свой обработчик на 
Цитата(Romikgy @  26.9.2006,  23:06 Найти цитируемый пост)
 WM_MOUSEMOVE

мы не сможем определять место где находится мышь?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 27.9.2006, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Если мышь ушла за форму, то нет - WM_MOUSEMOVE ты не получишь в данном случае.
PM MAIL   Вверх
Romikgy
Дата 27.9.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



дык в этом случае и 
Цитата(Dmitry_177 @  26.9.2006,  22:53 Найти цитируемый пост)
CM_MOUSEENTER и CM_MOUSELEAVE

тоже не получишь  smile 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 27.9.2006, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Я же говорю, CM_MOUSEENTER и CM_MOUSELEAVE генерируются TApplication на основе анализа положения курсора, но не при отлове сообщений, а наборот - при их отсутствии.

Добавлено @ 00:31 
Так сделано именно потому, что при уходе мыши, нам винда не шлёт никаких сообщений.
Вот и определяем, где наша мыша, когда их нет. Это к тому же и систему не грузит.
А на мусямове вешать - при движении мыши тормоза появятся.
PM MAIL   Вверх
Dmitry_177
Дата 27.9.2006, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А по какому сообщению тогда идет проверка? Я что-то не пойму...
PM MAIL   Вверх
Snowy
Дата 27.9.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Если я непонятно объясняю - скажите, что не понятно.
А то я уже 4-й раз повторяю.
Проверка идёт не по сообщению. Проверка идёт, когда сообщений нет!
PM MAIL   Вверх
Dmitry_177
Дата 27.9.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



TrackMouseEvent может лучше лучше будет использовать?
PM MAIL   Вверх
Snowy
Дата 27.9.2006, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Нужно ловить сообщения пиком, а не гетом.
Если работы нет - курим, проверяем.
Код

repeat
  if not PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
    DoIdle // сообщений нет - проверяем и вообще делаем что хотим
  else begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;
until Msg.Message = WM_QUIT;
Вот в этом "DoIdle" мы можем делать что хотим. Например следить за мышью.
PM MAIL   Вверх
Snowy
Дата 27.9.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Dmitry_177 @  27.9.2006,  09:02 Найти цитируемый пост)
TrackMouseEvent может лучше лучше будет использовать?
Можно и её. 
Только лучше _TrackMouseEvent из CommCtrl - на случай, если TrackMouseEvent не работает - она будет заглушкой.
В Борланд выбрали другой путь - через идль.
Так что у тебя 2 варианта.
PM MAIL   Вверх
Dmitry_177
Дата 16.11.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А какой способ всеже лучше и менее грузит систему? Я конечно понимаю что это для современных компьютеров очень малые расходы, но все же я хотел бы узнать какой способ лучше и быстрее...
PM MAIL   Вверх
Snowy
Дата 16.11.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Ну, если составлять рейтинг по нагрузке, то так (в порядке увеличения нагрузки):
1. TrackMouseEvent
2. OnIdle
8. WM_MOUSEMOVE
PM MAIL   Вверх
Dmitry_177
Дата 22.11.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал я вот так:
Код

const
  CM_MOUSEENTER = $B019;
  CM_MOUSELEAVE = $B020;

var
  hWindow: HWnd;
  WMouseInside: bool;

procedure DoIdle;
var
  Pt: TPoint;
begin
  GetCursorPos(Pt);
  if WindowFromPoint(Pt) = hWindow then
    begin
      if not WMouseInside then
        begin
          WMouseInside := true;
          SendMessage(hWindow, CM_MOUSEENTER, 0, 0);
        end;
    end
  else
    if WMouseInside then
      begin
        WMouseInside := false;
        SendMessage(hWindow, CM_MOUSELEAVE, 0, 0);
      end;
end;

begin
...
  hWindow := CreateWindow(...);
...

  repeat
    if not PeekMessage(AMessage, 0, 0, 0, PM_REMOVE) then
      DoIdle
    else
      begin
        TranslateMessage(AMessage);
        DispatchMessage(AMessage);
      end;
  until AMessage.Message = WM_QUIT;
end;


С формой все отлично работает, ловятся в WindowProc сообщения CM_MOUSEENTER/CM_MOUSELEAVE при наведении и уходе курсора мышки с формы.. А что делать если тоже самое нужно сделать еще и с контролами? Т.е. со всеми CHILD-окнами, которые находятся на этой форме чтобы с них ловился уход курсора и наведение?
PM MAIL   Вверх
Dmitry_177
Дата 25.11.2006, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вобщем процедуру DoIdle я так реализовал:
Код

procedure DoIdle;
var
  Pt: TPoint;
  PointHWND: HWND;
  PID: DWORD;
begin
  GetCursorPos(Pt);
  PointHWND := WindowFromPoint(Pt);
  if PointHWND <> SelfHWND then
    begin
      SendMessage(SelfHWND, CM_MOUSELEAVE, 0, 0);
      GetWindowThreadProcessID(PointHWND, @PID);
      if PID = GetCurrentProcessID then
        begin
          SendMessage(PointHWND, CM_MOUSEENTER, 0, 0);
          SelfHWND := PointHWND;
        end;
    end;
end;

PM MAIL   Вверх
bems
Дата 26.11.2006, 05:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Dmitry_177 @  22.11.2006,  09:20 Найти цитируемый пост)
А что делать если тоже самое нужно сделать еще и с контролами? Т.е. со всеми CHILD-окнами, которые находятся на этой форме чтобы с них ловился уход курсора и наведение? 

Вот такой вариант процедуры
Код

{$WRITEABLECONST ON}
procedure DoIdle;
const LastPointWnd:HWND=0;
var Pt:TPoint;PointWnd:HWND;
begin
GetCursorPos(Pt);
PointWnd:=MyWindowFromPoint(Pt);
if LastPointWnd<>PointWnd
   then begin
        if LastPointWnd<>0
           then SendMessage(LastPointWnd,CM_MOUSELEAVE,0,0);
        if PointWnd<>0
           then SendMessage(PointWnd,CM_MOUSEENTER,0,0);
        end;
LastPointWnd:=PointWnd;
sleep(200);
end;
{$WRITEABLECONST OFF}
шлет эти месаги и дочерним окнам

Это сообщение отредактировал(а) bems - 26.11.2006, 05:20


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


Опытный
**


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

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



Почти тоже самое, только без {$WRITEABLECONST ON} и {$WRITEABLECONST OFF} только вот что это значит я не знаю...
PM MAIL   Вверх
bems
Дата 26.11.2006, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Dmitry_177, sleep(200) убери  smile

Добавлено @ 05:47 
{$WRITEABLECONST ON} разрешает запись в типизированные константы, как было в турбоПаскакали
Глобально изменить можна в project/options/compiler/assignable typed constants
const LastPointWnd:HWND=0; эта "константа" будет инициализирована нулем только при первом заходе в процедуру
LastPointWnd:=PointWnd; после этого при следующем заходе в процедуру значение сохраниться измененным, а не 0
sleep(200); - погарячился, выкинь
{$WRITEABLECONST OFF} возвращаем дефолтный запрет изменения констант

Добавлено @ 05:50 
Цитата(Dmitry_177 @  26.11.2006,  05:30 Найти цитируемый пост)
Почти тоже самое
 это отследит и для дочерних окон



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


Эксперт
****


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

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



только SendMessage(LastPointWnd,CM_MOUSELEAVE,0,0) и SendMessage(PointWnd,CM_MOUSEENTER,0,0) лучше замени на прямые вызовы функций, а от сообщений тут нужно отказаться


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


Опытный
**


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

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



Зачем вообще константы изменять? Ведь для этого переменные есть... Только тут придется глобальную переменную делать, но а чем они так плохи?
PM MAIL   Вверх
bems
Дата 26.11.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



дело вкуса. Главное смысл ты понял  smile 


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


Опытный
**


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

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



Смысл то понял... но я не пойму никак всеже почему все говорят что глобальные переменные не рекомендуется использовать...
PM MAIL   Вверх
bems
Дата 27.11.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



из-за опасности изменить где не надо. Если ты себя контролируешь, то все путем. smile 
Ну вообще это требование хорошего стиля - возможность изменить значение переменной должна быть там, где программер предусмотрел, что это будет нужно и больше нигде. Хоть запись в типизированые константы борланд и не рекомендует, но все же в делфи нет статических переменных...


Цитата(bems @  26.11.2006,  06:19 Найти цитируемый пост)
только SendMessage(LastPointWnd,CM_MOUSELEAVE,0,0) и SendMessage(PointWnd,CM_MOUSEENTER,0,0) лучше замени на прямые вызовы функций, а от сообщений тут нужно отказаться 
а это ОБЯЗАТЕЛЬНО
не спрашивай, просто сделай, ок? smile 



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


Опытный
**


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

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



Цитата(bems @  26.11.2006,  06:19 ) 
только SendMessage(LastPointWnd,CM_MOUSELEAVE,0,0) и SendMessage(PointWnd,CM_MOUSEENTER,0,0) лучше замени на прямые вызовы функций, а от сообщений тут нужно отказаться  

а это ОБЯЗАТЕЛЬНО
не спрашивай, просто сделай, ок?


Я бы сделал так, но мне нужно вот как: в окне имеется несколько кнопок с моей отрисовкой, так вот каждой кнопке шлется сообщение CM_MOUSEENTER или CM_MOUSELEAVE и кнопка перерисовывается в зависимости от сообщения, т.е. "подсвечиваю" ее если курсор над ней или нет.. А вот как в одной функции для всех кнопок это сделать я что-то ума не приложу, вот и делаю через сообщения..

А еще я тут вот с чем столкнулся, если курсор находится над окном, а потом перемещается на кнопку которая находится в этом окне, то окну шлется CM_MOUSELEAVE а кнопке CM_MOUSEENTER, по идее все так и должно быть, но мне нужно чтобы не слалось окну CM_MOUSELEAVE в этом случае, если курсор над какой-то кнопкой, а чтоб слалось только тогда когда курсор вообще вышел за пределы окна.. Я вот думаю может константу LastPointWnd проверять на parent(это в VCL, а на API не знаю как) только что полученного значения PointWnd? и если это условие выполняется то слать только CM_MOUSEENTER.. Это все для того, что у меня форма при уходе курсора за ее пределы, т.е. в обработке CM_MOUSELEAVE становится полупрозрачной, а по сообщению CM_MOUSEENTER становится полностью видимой, а т.к. эти же сообщения нужны и для кнопок получается так, что если курсор зайдет в пределы кнопки то форма становится полупрозрачной..
PM MAIL   Вверх
bems
Дата 4.12.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Dmitry_177 @  3.12.2006,  18:33 Найти цитируемый пост)
 А вот как в одной функции для всех кнопок это сделать я что-то ума не приложу, вот и делаю через сообщения..
тогда их значения получай через RegisterWindowMessage

Цитата(Dmitry_177 @  3.12.2006,  18:33 Найти цитируемый пост)
Я вот думаю может константу LastPointWnd проверять на parent(это в VCL, а на API не знаю как)

GetParent

Но это поможет только если у тебя все кнопки прямо на окне (нет одного/несольких промежуточных контейнеров)



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


Опытный
**


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

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



Попробовал так, пока без RegisterWindowMessage:
Код

procedure DoIdle;
var
  Pt: TPoint;
  PointHWND: HWND;
  PID: DWORD;
begin
  GetCursorPos(Pt);
  PointHWND := WindowFromPoint(Pt);
  if PointHWND <> SelfHWND then
    begin
      if ((GetParent(SelfHWND) = hWindow) or (SelfHWND = hWindow)) and ((GetParent(PointHWND) <> hWindow) or (PointHWND <> hWindow)) then
        begin
          SendMessage(SelfHWND, CM_MOUSELEAVE, 0, 0);
          SendMessage(PointHWND, CM_MOUSEENTER, 0, 0);
        end;
    end;
  SelfHWND := PointHWND;
end;


CM_MOUSELEAVE правильно шлется, а CM_MOUSEENTER нет... Что-то я запутался с этими условиями...(((
PM MAIL   Вверх
Dmitry_177
Дата 6.12.2006, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот так работает, немного замороченно с условиями, но работает... Может можно и попроще сделать, не знаю...
Код

procedure DoIdle;
var
  Pt: TPoint;
  PointHWND: HWND;
begin
  GetCursorPos(Pt);
  PointHWND := WindowFromPoint(Pt);
  if PointHWND <> SelfHWND then
    begin
      if SelfHWND = hWindow then
        begin
          if GetParent(PointHWND) = hWindow then
            SendMessage(PointHWND, CM_MOUSEENTER, 0, 0)
          else
            if (GetParent(PointHWND) <> hWindow) or (PointHWND <> hWindow) then
              SendMessage(SelfHWND, CM_MOUSELEAVE, 0, 0);
        end
      else
        if GetParent(SelfHWND) = hWindow then
          begin
            SendMessage(SelfHWND, CM_MOUSELEAVE, 0, 0);
            if (PointHWND <> hWindow) and (GetParent(PointHWND) <> hWindow) then
              SendMessage(hWindow, CM_MOUSELEAVE, 0, 0);
          end
        else
          SendMessage(PointHWND, CM_MOUSEENTER, 0, 0);

      SelfHWND := PointHWND;
    end;
end;

PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.

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


 




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


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

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