Конференция "WinAPI" » Создание что то типа панели и сделать ее владельцем кнопки.
 
  • BuGaGa (07.01.17 22:15) [0]
    Приветствую.

    Пытаюсь сделать "панель" (пытался делать через Static, затем через заполнение TWndClassEx и создание на его основе окно с присвоением своей WndProc.),
    на которой можно будет разместить окна, "владельцем" которых будет "панель", и в ее WndProc будет обрабатываться сообщения от дочерних окон.
    Через TWndClassEx как вы работает.
    Проверил WM_CREATE где создается кнопка стиля BS_AUTOCHECKBOX,
    WM_COMMAND === где обрабат. нажатие на кнопку, работает
    WM_SIZE === где перемещаю кнопку. работает.

    WM_CTLCOLORBTN не приходит/
    WM_CTLCOLORSTATIC: не хочет работать.
    и Delphi ругается [DCC Hint]  Value assigned to 'StaticWinProc' never used в этом сообщение, хотя оно и проходит.
    проверил

    iu : integer;

    WM_CTLCOLORSTATIC:
         begin
           if LPar = Longint(stt) then
             begin
               SetTextColor(WPar, 255);
               SetBkColor(WPar, 8421504);
               Result:= GetStockObject(GRAY_BRUSH);
             end;
           if LPar = Longint(CBT) then
             Result:= GetStockObject(GRAY_BRUSH);
          inc(iu);
        SetWindowText(Form, IntToStr(iu));

         end;


    Надеюсь поймете вопрос ----- Как правильно сделать чтот-то похожее на Tpanel ?
    Хотя бы в теории.

    Спасибо.

    Если нужно, Выложу весь код.
  • Rouse_ © (08.01.17 05:18) [1]
    Давай уж весь код целиком архивом, так проще будет
  • BuGaGa (08.01.17 15:08) [2]
    Rouse_    ===     https://yadi.sk/d/aCzmunJ737kvVH
    Шибко не ругаетесь.
  • Rouse_ © (08.01.17 17:07) [3]
    Угу, скачал мельком глянул, что-то похожее в качестве примера у меня кажется было на рабочей машине, завтра постараюсь отписаться (ну если не ругать за код, как просил :)
  • BuGaGa (08.01.17 17:14) [4]

    > Rouse_

    Спасибо большое. Будемс ждать.
  • Rouse_ © (09.01.17 11:24) [5]
    Лови, слегка причесал, но код страшный:
    https://dl.dropboxusercontent.com/u/70911765/FormUnit.zip

    К примеру:
       WM_CTLCOLORSTATIC:
         begin
           if LPar = Longint(stt) then


    Это вообще никогда не заработает, у тебя же stt - локальная переменная, которая после обработки WM_CREATE выходит за область видимости и по приходу WM_CTLCOLORSTATIC будет содержать в себе все что угодно, кроме того что надо.

    Я бы это все сел и переписал с нуля вдумчиво.
  • ЯЧтсия (09.01.17 14:48) [6]
    Удалено модератором
  • ЯЧтсия (09.01.17 15:03) [7]
    Удалено модератором
  • BuGaGa (09.01.17 19:40) [8]

    > Rouse_

    Спасибо.
    WM_CTLCOLORSTATIC:
         Убрал  Result := DefWindowProc(Wnd, Msg, WPar, LPar);, т.к. считаю что DefWindowProc здесь не требуется.

    Вот если придется обрабатывать WM_SYSCOMMAND, то тут необходим.

    "что-то похожее в качестве примера у меня кажется было на рабочей машине" ==== не нашлось?
    И вообще, стоит ли так делать как я? Или есть лругой способ?
  • Rouse_ © (10.01.17 10:03) [9]

    > Убрал  Result

    Зря, читай справку по WM_CTLCOLORSTATIC


    > не нашлось?

    Ну там чуть другая задача была: http://forum.sources.ru/index.php?showtopic=194622


    > И вообще, стоит ли так делать как я? Или есть лругой способ?

    Возьми KOL и на нем напиши, раз тебе малый обьем нужен, либо найди примеры нормальный приложений реализованных с использованием только WinAPI и от них пляши.
  • BuGaGa (10.01.17 21:22) [10]
    Rouse_
    Век живи, век учись.
    Укажите мне на мои ошибки.(Вроде-бы по msdn делаю)
 
Конференция "WinAPI" » Создание что то типа панели и сделать ее владельцем кнопки.
Есть новые Нет новых   [118478   +40][b:0][p:0.001]