Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2009, 11:41   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Определить размеры окошка

Чем в API определить размеры окошка? А то считываю от GetCursorPos, а там общие, а мне нужны на форме (относительно 0, 0 формы).
Знаю, что нужно прибавить размер формы Height и Width, но как их определить по апишному?

P.S. Еще, кажись, нужно прибавить размер рамки окна (толщину).
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 06.11.2009, 11:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

GetWindowRect
GetClientRect
И моя любимая: GetWindowPlacement
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.11.2009, 13:54   #3
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Немного не понял, что именно нужно...
Цитата:
Чем в API определить размеры окошка?
Узнавать размер/положение окна? Всего или только клиентской области?
Цитата:
А то считываю от GetCursorPos, а там общие, а мне нужны на форме (относительно 0, 0 формы)
Или преобразовывать координаты мыши из глобальных в координаты клиентской области своего приложения?

Тогда есть функции ClientToScreen и ScreenToClient (и в WinAPI и в TForm - названия одинаковые)

Код:
var p1, p2: TPoint;
begin
p1:=Form1.ClientToScreen(Point(0, 0));
GetCursorPos(p2);
Form1.Caption:='('+IntToStr(p2.X-p1.X)+', '+IntToStr(p2.Y-p1.Y)+')';
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 06.11.2009, 18:08   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Для проверки поставил пока статичные координаты, до них был хоть какой-то эффект, теперь вообще не реагируем. Координаты формы задаю при CreateWindow (400,200), после создания окна перед циклом сбора сообщений дублирую координаты в XM, НЬю D обработчике на движение мыши пишу:
Код:
Procedure LightForButtons; {Процедура подсветки кнопок   }
 Var
  Number : Byte;                     {Номер кнопки       }
  lpPoint : TPOINT;                  {Для курсора        }
  XF, YF :Integer;                   {Координаты на форме}
 Begin
  Number := 0;
  GetCursorPos(lpPoint);
  With lpPoint do
   Begin
    XF := X + XM;
    YF := Y + YM;
    If (XF>125) And
       (XF<274) And
       (YF>361) And
       (YF<395) Then {Number := 1;} Windows.Beep(400,400); {Кнопка "Сказать"}
   End;
 End;

Function WindowProc(HWND,{Процедура обработки сообщений  }
                    Msg,
                    wParam,
                    lParam: Longint): Longint;
 Stdcall;
 Begin
   Result := DefWindowProc(HWND, Msg, wParam, lParam);
   Case Msg Of

   WM_MOUSEMOVE: LightForButtons;   {Процедура подсветки кнопок   }
   WM_DESTROY  : ShutDown;          {Завершения программы         }
   End;
 End;
Код:
 { ************ Создание главного окна **************** }

  Handle := CreateWindowEx(0, 'TAliusForm', 'Alius',
         WS_OVERLAPPEDWINDOW Or
         WS_VISIBLE Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SYSMENU,
         400, 200, 400, 400,
         0, 0,
         hInst, Nil);
  { ************ Создания шрифта в приложении ********** }

  hFont := CreateFont(
        -11, 0, 0, 0, 0, 0, 0, 0,
        DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,
        CLIP_DEFAULT_PRECIS,
        DEFAULT_QUALITY,
        DEFAULT_PITCH Or FF_DONTCARE, 'MS Sans Serif');
   { ********** Создание изображения и дадим ему шрифт * }
  IMGMain := CreateWindow(
          'Static',
          '' ,
          WS_CHILD Or SS_BITMAP Or WS_VISIBLE,
          0, 0, 400, 400, Handle, 0, hInst, Nil);
  SendMessage(IMGMain, WM_SETFONT, hFont, 0);

  XM := 400;          { Координаты формы относительно     }
  YM := 200;          { точки 0,0                         }
Я что-то делаю не так?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 06.11.2009, 18:45   #5
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Смущение

Хм... Сначала показалось что это на C++... ))

Я ещё не пробовал делать на Делфи проги чисто на Win32API, экспериментирую на каком-то кривоватом "Microsoft Visual C++ 6.0"... =(

Можете весь проект сбросить?
Что именно должно получаться?)
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 06.11.2009, 18:51   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Я ещё не пробовал делать на Делфи проги чисто на Win32API
Я тоже. Вот и пытаюсь.
Код:
{ ****************************************************** }
{ *************** Общая информация ********************* }
{ ****************************************************** }


Program Alius;


Uses
  Windows,
  Messages,
  Commctrl;

{$R 'Icon.res'}

Var
  WinClass : TWndClass;                     {Главное окно}
  hInst : HWND;                             {Приложение  }
  Handle : HWND;                            {Локальный   }
  Msg : TMSG;                               {Сообщение   }
  hFont : HWND;                             {Шрифт       }
  IMGMain : HWND;                           {Изображение }
  XM, YM: Integer;                      {Координаты формы}
  Bmp: HBitMap;                      {Изображение IMGMain}

{ ****************************************************** }
{ ***************** Процедуры и функции **************** }
{ ****************************************************** }

Procedure ShutDown;      {Процедура завершения программы }
 Begin
   DeleteObject(hFont);                 {Снял шрифт      }
   UnRegisterClass('TAliusForm', hInst);{Удалил окно     }
   ExitProcess(hInst);                  {Закрыл программу}
 End;

{    ************************************************    }

Procedure LightForButtons; {Процедура подсветки кнопок   }
 Var
  Number : Byte;                     {Номер кнопки       }
  lpPoint : TPOINT;                  {Для курсора        }
  XF, YF :Integer;                   {Координаты на форме}
 Begin
  Number := 0;
  GetCursorPos(lpPoint);
  With lpPoint do
   Begin
    XF := X + XM;
    YF := Y + YM;
    If (XF>125) And
       (XF<274) And
       (YF>361) And
       (YF<395) Then {Number := 1;} Windows.Beep(400,400); {Кнопка "Сказать"}
   End;
 End;

Function WindowProc(HWND,{Процедура обработки сообщений  }
                    Msg,
                    wParam,
                    lParam: Longint): Longint;
 Stdcall;
 Begin
   Result := DefWindowProc(HWND, Msg, wParam, lParam);
   Case Msg Of

   WM_MOUSEMOVE: LightForButtons;   {Процедура подсветки кнопок   }
   WM_DESTROY  : ShutDown;          {Завершения программы         }
   End;
 End;

{ ****************************************************** }
{ ******************** Тело программы ****************** }
{ ****************************************************** }

 Begin
  hInst := GetModuleHandle(Nil);
   With WinClass Do
    Begin
     Style := CS_PARENTDC;                                 {Стиль главного окна }
     hIcon := LoadIcon(hInst, MAKEINTRESOURCE('MAINICON'));{Иконка              }
     lpfnWndProc := @WindowProc;                           {Обработчик сообщений}
     hInstance := hInst;
     hbrBackground := COLOR_BTNFACE + 1;                   {Цвет окна           }
     lpszClassName := 'TAliusForm';                        {Класс Окна          }
     hCursor := LoadCursor(0, IDC_ARROW);                  {Активный курсор     }
    End;
  InitCommonControls;
  RegisterClass(WinClass);                                 {Регистрация класса  }

  { ************ Создание главного окна **************** }

  Handle := CreateWindowEx(0, 'TAliusForm', 'Alius',
         WS_OVERLAPPEDWINDOW Or
         WS_VISIBLE Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SYSMENU,
         400, 200, 400, 400,
         0, 0,
         hInst, Nil);
  { ************ Создания шрифта в приложении ********** }

  hFont := CreateFont(
        -11, 0, 0, 0, 0, 0, 0, 0,
        DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,
        CLIP_DEFAULT_PRECIS,
        DEFAULT_QUALITY,
        DEFAULT_PITCH Or FF_DONTCARE, 'MS Sans Serif');
   { ********** Создание изображения и дадим ему шрифт * }
  IMGMain := CreateWindow(
          'Static',
          '' ,
          WS_CHILD Or SS_BITMAP Or WS_VISIBLE,
          0, 0, 400, 400, Handle, 0, hInst, Nil);
  SendMessage(IMGMain, WM_SETFONT, hFont, 0);

  XM := 400;          { Координаты формы относительно     }
  YM := 200;          { точки 0,0                         }

  { *********** Коллекционируем сообщения *************** }


  While (GetMessage(Msg, 0, 0, 0)) do
   Begin
    TranslateMessage(Msg);    {Вызов принят                }
    DispatchMessage(Msg);     {Ждите, скоро приедем        }
   End;

 End.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 06.11.2009, 19:10   #7
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

У меня нету какого-то 'Icon.res'...
Форма пустая, но всё работает - просто знаки перепутаны...
Код:
      XF:=X-XM;
      YF:=Y-YM;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 06.11.2009, 19:17   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ааааа!!!! Все! Спасибо! Понял свою ошибку. Исправлюсь, больше так не буду
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 06.11.2009 в 19:20.
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание окошка и кнопочки в нем Olejik Общие вопросы C/C++ 13 30.09.2009 18:21
Размеры картинки Lemo Общие вопросы Delphi 22 09.02.2009 00:04
Размеры изображения RamireZ Мультимедиа в Delphi 5 05.10.2008 09:48
Среди 20 введёных чисел определить чётные, распечатать их, определить min Spade Помощь студентам 4 15.06.2008 18:39
Запретить закрытие окошка формы крестиком "Х" Slim Microsoft Office Excel 5 28.03.2007 19:39