На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Чисто WinAPI, Delphi & WinAPI
    Добрый день.
    Пишу программу на WinAPI.
    Создал TabSheet с помощью:
    ExpandedWrap disabled
      TabSheet := CreateWindow(WC_TABCONTROL, '', WS_CHILD or WS_VISIBLE, 2, 0, 320, 227, Handle, TabSheet, hInst, nil);
      SendMessage(TabSheet, WM_SETFONT, hFont, 0);
      SendMessage(TabSheet, TCM_SETIMAGELIST, 0, ImageList);
      TabItem.mask := TCIF_TEXT or TCIF_IMAGE;
      TabItem.pszText := 'Пароль';
      TabItem.cchTextMax := 0;
      TabItem.iImage := 0;
      SendMessage(TabSheet, TCM_INSERTITEM, 0, longint(@TabItem));
      TabItem.iImage := 1;
      TabItem.pszText := 'Горячие клавиши';
      SendMessage(TabSheet, TCM_INSERTITEM, 1, longint(@TabItem));

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

    И еще.
    Создал Лабел, но цвет заливки на TabSheet отличается от заливки на Label, как поменять цвет заливки на Label?
    Если что-то не так, то результат всё равно будет таким, как ты захочешь;
    if not True then Result := True else Result := True;
      Цитата msdn
      TCN_SELCHANGE Notification

      ---------------------------------------------------

      Notifies a tab control's parent window that the currently selected tab has changed. This message is sent in the form of a WM_NOTIFY message.
      "Бубен Team Edition for Developers"
      ULLib | ULj2me
        Цитата DemonXpPro @
        Вопрос: Какие мне ловить сообщения чтобы узнать, что выбрана другая закладка.

        И еще.
        Создал Лабел, но цвет заливки на TabSheet отличается от заливки на Label, как поменять цвет заливки на Label?

        Приблизительно так:
        ExpandedWrap disabled
           switch (message)
           {
             case WM_NOTIFY:
           
             NMHDR *ptab = (LPNMHDR) lParam;
           
             if ((ptab->code == TCN_SELCHANGE) && (ptab->hwndFrom == hwnd))
             {
           // узнать номер нового таба
               tab_active = TabCtrl_GetCurSel ((HWND)ptab->hwndFrom);
           
             }
             break;
          ...
           }


        2.) Не совсем понимаю, что такое Label. :(

        Вероятно надо обрабатывать сообщение WM_CTLCOLORSTATIC.
        Или одно из группы: WM_CTLCOLORxxx
        Подпись была выключена в связи с наложенным заземлением.
          Цитата DemonXpPro @
          Создал Лабел, но цвет заливки на TabSheet отличается от заливки на Label, как поменять цвет заливки на Label?


          Цвет заливки по умолчанию должен быть одинаков.
          Можно зарисовать все градиентом из темы -- EnableThemeDialogTexture
          char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
          for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


          user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
            э. вот скрин. по поводу заливки

            Добавлено
            Да. и что за структура "LPNMHDR"
            Прикреплённый файлПрикреплённый файлБезымянный.jpg (33.62 Кбайт, скачиваний: 522)
            Если что-то не так, то результат всё равно будет таким, как ты захочешь;
            if not True then Result := True else Result := True;
              сделай статик прозрачным.
              как сказали в 3м посте лови WM_CTLCOLORSTATIC и возвращай кисть нужного цвета

              чтоб статик был прозрачным должна возвращаться кисть полученная следующим образом:
              ExpandedWrap disabled
                GetStockObject(NULL_BRUSH);


              Добавлено
              Цитата DemonXpPro @
              Да. и что за структура "LPNMHDR"

              это указатель на экземпляр структуры.... в мсдн ведь всё написано.... параметр сообщения
              "Бубен Team Edition for Developers"
              ULLib | ULj2me
                Цитата ЫукпШ @
                ExpandedWrap disabled
                   switch (message)
                   {
                     case WM_NOTIFY:
                   
                     NMHDR *ptab = (LPNMHDR) lParam;
                   
                     if ((ptab->code == TCN_SELCHANGE) && (ptab->hwndFrom == hwnd))
                     {
                   // узнать номер нового таба
                       tab_active = TabCtrl_GetCurSel ((HWND)ptab->hwndFrom);
                   
                     }
                     break;
                  ...
                   }

                Большое спасибо.

                -Added
                Цитата ElcnU @
                сделай статик прозрачным.
                как сказали в 3м посте лови WM_CTLCOLORSTATIC и возвращай кисть нужного цвета

                чтоб статик был прозрачным должна возвращаться кисть полученная следующим образом:
                ExpandedWrap disabled
                  GetStockObject(NULL_BRUSH);

                А нельзя ли поподробнее(в коде).
                Просто я в вин апи нидавно, вот учусь :)
                Я не понил куда возвращать?
                Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                if not True then Result := True else Result := True;
                  Цитата DemonXpPro @
                  А нельзя ли поподробнее(в коде).

                  на си
                  ExpandedWrap disabled
                    switch(message)
                    {
                    case WM_CTLCOLORSTATIC:
                        if(GetDlgItem(IDC_MY_STATIC)==(HWND)lParam)
                        {
                            static HBRUSH hbrBackGnd=(HBRUSH)::GetStockObject(NULL_BRUSH);
                            return hbrBackGnd;
                        }
                        break;
                    ...


                  Цитата DemonXpPro @
                  Я не понил куда возвращать?

                  из оконной функции. смотри справку по указанному сообщению
                  "Бубен Team Edition for Developers"
                  ULLib | ULj2me
                    Цитата ElcnU @
                    ExpandedWrap disabled
                      switch(message)
                      {
                      case WM_CTLCOLORSTATIC:
                          if(GetDlgItem(IDC_MY_STATIC)==(HWND)lParam)
                          {
                              static HBRUSH hbrBackGnd=(HBRUSH)::GetStockObject(NULL_BRUSH);
                              return hbrBackGnd;
                          }
                          break;
                      ...

                    Спасибо. Сработало!

                    Добавлено
                    Всем спасибо.
                    Сообщение отредактировано: DemonXpPro -
                    Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                    if not True then Result := True else Result := True;
                      Блин. чево то опять не получается. :(

                      Вот как я все делаю(пишу на делфах).
                      ExpandedWrap disabled
                        program WB;
                         
                        uses
                          windows, messages, commctrl, XPMan; //Используемые модули
                         
                        {$R icons.res}
                         
                        var
                          WinClass : TWndClass;
                          hInst : HWND;
                          Handle : HWND;
                          Msg : TMSG;
                          hFont : HWND;
                          Label1, Label2, Label3, Label4, Label5, Label6: HWND;
                          Edit1, Edit2, Edit3, Edit4 : HWND;
                          cRunWithWindows : HWND;
                          TabSheet: HWND;
                          TabItem: TTCItem;
                          ImageList: HWND;
                          bNewChangePasswd, bExit : HWND;
                         
                        procedure ShutDown;
                        begin
                          DeleteObject(hFont);
                          UnRegisterClass('MyFormClass', hInst);
                          ExitProcess(hInst);
                        end;
                         
                        function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall;
                        var
                        hbrBackGnd: HBRUSH;
                        begin
                          case Msg of
                        WM_COMMAND:
                        if (lParam = bExit) and (HiWord(wParam) = BN_CLICKED) then
                          halt;
                                    
                          WM_DESTROY: ShutDown;
                          WM_ENDSESSION: if wParam = 1 then ShutDown;
                          
                          //////////////////////////////////////////////////////////////////////////////
                          /// КАК  ПРАВИЛЬНО ОБРАБАТЫВАТЬ????? ИЛИ МОЖЕТ БЫТЬ НУЖНО ОБРАБАТЫВАТЬ WM_PAINT??????????
                          //////////////////////////////////////////////////////////////////////////////
                          WM_CTLCOLORSTATIC: if lParam <> cRunWithWindows then
                            begin
                            hbrBackGnd := GetStockObject(NULL_BRUSH);
                            Result := hbrBackGnd;
                            exit;
                            end;  
                          //////////////////////////////////////////////////////////////////////////////
                          end;
                          Result := DefWindowProc(hwnd, msg, wparam, lparam);
                        end;
                         
                        begin
                        hInst := GetModuleHandle(nil);
                          with WinClass do
                          begin
                           Style := CS_PARENTDC;
                           hIcon := LoadIcon(hInst, PChar('MAINICON'));
                           lpfnWndProc := @WindowProc;
                           hInstance := hInst;
                           hbrBackground := COLOR_BTNFACE + 1;
                           lpszClassName := 'MyFormClass';
                           hCursor := LoadCursor(0, IDC_ARROW);
                          end;
                        InitCommonControls;
                        RegisterClass(WinClass);
                        // Создание главного окна программы
                        Handle := CreateWindowEx(0, 'MyFormClass', 'Настройки программы', WS_VISIBLE or WS_SYSMENU, 320, 230, 330, 312, 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');
                        // Создание ImageList для TabSheet
                        ImageList := ImageList_Create(16, 16, ILC_COLOR32 or ILC_MASK, 10, 10);
                        ImageList_AddIcon(ImageList, LoadIcon(hInstance, 'Z0'));
                        ImageList_AddIcon(ImageList, LoadIcon(hInstance, 'Z1'));
                        // Создание TabSheet
                        TabSheet := CreateWindow(WC_TABCONTROL, '', WS_CHILD or WS_VISIBLE, 2, 0, 320, 227, Handle, TabSheet, hInst, nil);
                        SendMessage(TabSheet, WM_SETFONT, hFont, 0);
                        SendMessage(TabSheet, TCM_SETIMAGELIST, 0, ImageList);
                        // Создание вкладок на TabSheet
                        TabItem.mask := TCIF_TEXT or TCIF_IMAGE;
                        TabItem.pszText := 'Пароль';
                        TabItem.cchTextMax := 0;
                        TabItem.iImage := 0;
                        SendMessage(TabSheet, TCM_INSERTITEM, 0, longint(@TabItem));
                        TabItem.iImage := 1;
                        TabItem.pszText := 'Горячие клавиши';
                        SendMessage(TabSheet, TCM_INSERTITEM, 1, longint(@TabItem));
                        // Создание надписи
                        Label1 := CreateWindow('Static', 'Старый пароль:', WS_CHILD or SS_NOTIFY or SS_LEFT or WS_VISIBLE, 8, 24, 80, 13, Handle, 0, hInst, nil);
                        SendMessage(Label1, WM_SETFONT, hFont, 0);
                        // Создание надписи
                        Label2 := CreateWindow('Static', 'Новый пароль:', WS_CHILD or SS_NOTIFY or SS_LEFT or WS_VISIBLE, 8, 64, 76, 13, Handle, 0, hInst, nil);
                        SendMessage(Label2, WM_SETFONT, hFont, 0);
                        // Создание надписи
                        Label3 := CreateWindow('Static', 'Повторить новый пароль:', WS_CHILD or SS_NOTIFY or SS_LEFT or WS_VISIBLE, 8, 104, 131, 13, Handle, 0, hInst, nil);
                        SendMessage(Label3, WM_SETFONT, hFont, 0);
                        // Создание надписи
                        Label4 := CreateWindow('Static', 'Подсказка к паролю:', WS_CHILD or SS_NOTIFY or SS_LEFT or WS_VISIBLE, 8, 160, 109, 13, Handle, 0, hInst, nil);
                        SendMessage(Label4, WM_SETFONT, hFont, 0);
                        // Создание надписи
                        Label5 := CreateWindow('Static', 'Статус:', WS_CHILD or SS_NOTIFY or SS_LEFT or WS_VISIBLE, 8, 144, 37, 13, Handle, 0, hInst, nil);
                        SendMessage(Label5, WM_SETFONT, hFont, 0);
                        // Создание надписи
                        Label6 := CreateWindow('Static', 'Label6', WS_CHILD or SS_NOTIFY or SS_LEFT or WS_VISIBLE, 160, 24, 154, 197, Handle, 0, hInst, nil);
                        SendMessage(Label6, WM_SETFONT, hFont, 0);
                        // Создание Edit'a
                        Edit1 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or ES_AUTOHSCROLL or WS_VISIBLE, 8, 38, 145, 21, Handle, 0, hInst, nil);
                        SendMessage(Edit1, WM_SETFONT, hFont, 0);
                        // Создание Edit'a
                        Edit2 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or ES_AUTOHSCROLL or WS_VISIBLE, 8, 80, 145, 21, Handle, 0, hInst, nil);
                        SendMessage(Edit2, WM_SETFONT, hFont, 0);
                        // Создание Edit'a
                        Edit3 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or ES_AUTOHSCROLL or WS_VISIBLE, 8, 120, 145, 21, Handle, 0, hInst, nil);
                        SendMessage(Edit3, WM_SETFONT, hFont, 0);
                        // Создание Edit'a
                        Edit4 := CreateWindowEx(WS_EX_CLIENTEDGE, 'Edit', '', WS_CHILD or ES_AUTOHSCROLL or WS_VISIBLE, 8, 176, 145, 21, Handle, 0, hInst, nil);
                        SendMessage(Edit4, WM_SETFONT, hFont, 0);
                        // Создание кнопки для создания/изменение пароля
                        bNewChangePasswd := CreateWindow('Button', 'Создать/Изменить пароль', WS_CHILD or BS_TEXT or WS_VISIBLE, 8, 200, 145, 21, Handle, bNewChangePasswd, hInst, nil);
                        SendMessage(bNewChangePasswd, WM_SETFONT, hFont, 0);
                        // Создание checkbox'a для дообавления программы в автозапуск Windows
                        cRunWithWindows := CreateWindow('Button', 'Запуск вместе с Windows', WS_CHILD or BS_AUTOCHECKBOX or WS_VISIBLE, 4, 230, 153, 17, Handle, 0, hInst, nil);
                        SendMessage(cRunWithWindows, WM_SETFONT, hFont, 0);
                        // Создание кнопки для закрытия окна
                        bExit := CreateWindow('Button', 'Закрыть', WS_CHILD or BS_TEXT or WS_VISIBLE, 4, 252, 316, 21, Handle, bExit, hInst, nil);
                        SendMessage(bExit, WM_SETFONT, hFont, 0);
                         
                         
                         while(GetMessage(Msg, 0, 0, 0)) do
                          begin
                          TranslateMessage(Msg);
                          DispatchMessage(Msg);
                         end;
                        end.


                      Помогите, почему заливки не совпадают на TabSheet и всех Static'ах?
                      Подключаю исходники, только помогите!
                      Прикреплённый файлПрикреплённый файлWB_API.rar (6.27 Кбайт, скачиваний: 151)
                      Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                      if not True then Result := True else Result := True;
                        Е-мае... ты тоже не знаешь, что э.у. на вкладках по хорошему должны лежать на диалогах-страничках?
                        char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                        for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                        user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                          Цитата B.V. @
                          Е-мае... ты тоже не знаешь, что э.у. на вкладках по хорошему должны лежать на диалогах-страничках?

                          Я немного не понял. Что ты имеешь в виду?
                          Поясни.
                          Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                          if not True then Result := True else Result := True;
                            Сначала создавай диалог без рамки, затем создавай static'и и прочие э.у. на нем, и затем делай этот диалог дочерним окну-родителю TabControl'а. Для того, что бы вкладка была затекстурена в соответствии с темой (Аеро или ХР-темой), вызови в конце EnableThemeDialogTexture для диалога-странички.
                            char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                            for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                            user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                              Цитата B.V. @
                              Сначала создавай диалог без рамки, затем создавай static'и и прочие э.у. на нем, и затем делай этот диалог дочерним окну-родителю TabControl'а. Для того, что бы вкладка была затекстурена в соответствии с темой (Аеро или ХР-темой), вызови в конце EnableThemeDialogTexture для диалога-странички.

                              Ну в общих чертах понятно.
                              Только вот хотелось бы это в коде увидеть...

                              Добавлено
                              Да. и где находится EnableThemeDialogTexture?
                              Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                              if not True then Result := True else Result := True;
                                Цитата DemonXpPro @
                                Только вот хотелось бы это в коде увидеть...


                                Ну, вот тебе в коде: http://code.google.com/p/easybar/source/browse/trunk/FilePropDlg.cpp

                                Цитата DemonXpPro @
                                Да. и где находится EnableThemeDialogTexture?


                                В Дельфи? Понятия не имею.

                                Добавлено
                                Заглянул в Дельфи, оказывается, у них есть подраздел Дельфи WinAPI. А в подразделе твой дубль Чито WinAPI
                                Нехорошо получается
                                char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                                for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                                user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                                  M
                                  Тема перенесена из WinAPI
                                  char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                                  for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                                  user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                                    Цитата B.V. @
                                    Добавлено
                                    Заглянул в Дельфи, оказывается, у них есть подраздел Дельфи WinAPI. А в подразделе твой дубль Чито WinAPI
                                    Нехорошо получается

                                    Да. я знаю. просто там ступил один раз и туда и сюда тему сделал.
                                    Больше так не буду . :)

                                    -Added
                                    Цитата B.V. @
                                    Ну, вот тебе в коде: http://code.google.com/p/easybar/source/browse/trunk/FilePropDlg.cpp

                                    Так ведь тута, имеется ввиду, что окно создается из ресурсов?
                                    А я ни так делаю.
                                    Так я и ничего ни понил. :(
                                    Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                                    if not True then Result := True else Result := True;
                                      Цитата DemonXpPro @
                                      Так ведь тута, имеется ввиду, что окно создается из ресурсов?


                                      Ну, замени создание окна из шаблона диалога в ресурсах на CreateWindow
                                      char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
                                      for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


                                      user posted image Чат Исходников в СкайпеНе тормози, форум теперь здесь!Чат Исходников в Дискорде
                                        Я просто не понимаю самой идеи?
                                        В чем смысл????
                                        Не доходит до меня ид***та? :)
                                        Можно рассписать это в подробностях исходя из привиденного мною кода моей программы?
                                        Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                                        if not True then Result := True else Result := True;
                                          Цитата DemonXpPro @
                                          Я просто не понимаю самой идеи?

                                          идея самая обыкновенная:
                                          1) контролам типа кнопочек, эдитов итд предписано лежать на диалогах.
                                          Цитата msdn
                                          A dialog box is a temporary window an application creates to retrieve user input. An application typically uses dialog boxes to prompt the user for additional information for menu items. A dialog box usually contains one or more controls (child windows) with which the user enters text, chooses options, or directs the action.

                                          остальные варианты, ИМХО, от лукавого....
                                          2)как сказал B.V., вкладка должна быть одним окном, которое несет на себе дочерние контролы
                                          3) читам мсдн раздел Creating a Tabbed Dialog Box

                                          могу привести еще пример 23й пост

                                          ЗЫ:что тебе мешает создать диалог в ресурсах?
                                          "Бубен Team Edition for Developers"
                                          ULLib | ULj2me
                                            Цитата ElcnU @
                                            что тебе мешает создать диалог в ресурсах?

                                            Ничего.
                                            Разве без вшития в ресурсы ни как?
                                            Я бы хотел без ресурсов.
                                            да и можно где нить пример на delphi?
                                            Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                                            if not True then Result := True else Result := True;
                                              Цитата DemonXpPro @
                                              Разве без вшития в ресурсы ни как?

                                              да не читай ты через пост!!!! в 18м посту подсказка была. остальное решать тебе...

                                              Цитата DemonXpPro @
                                              да и можно где нить пример на delphi?

                                              а че тебя так язык пугает? всё равно winapi ;)
                                              "Бубен Team Edition for Developers"
                                              ULLib | ULj2me
                                                Цитата ElcnU @
                                                а че тебя так язык пугает?

                                                сам не знаю. просто не понятно.
                                                Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                                                if not True then Result := True else Result := True;
                                                  а зачем в Delphi WinApi ??????????? чем тебя VCL не устраивает?
                                                  Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал"("Yоur bunnу wrоte")
                                                    Цитата Dem_max @
                                                    а зачем в Delphi WinApi ??????????? чем тебя VCL не устраивает?

                                                    Размеры большие получаются.
                                                    Написал программу на VCL, а теперь хочу переписать на WinAPI
                                                    Если что-то не так, то результат всё равно будет таким, как ты захочешь;
                                                    if not True then Result := True else Result := True;
                                                      Хм, когда-то делал такое. Вот исходник. Выцепи что необходимо.
                                                      Сообщение отредактировано: Maksim V. -

                                                      Прикреплённый файлПрикреплённый файлdialog_systab32_src.zip (25.35 Кбайт, скачиваний: 131)
                                                        С таким подходом к созданию приложения получишь один серьезный недостаток: не будет работать переход между контролами по нажатию Tab. Дабы избежать этого, рекомендуется воспользоваться диалогами из ресурсов с CreateDialogParam или CreateDialogIndirectParam с созданием шаблонов диалогов вручную. Думаю, в делфи что-то такое должно быть предусмотрено...
                                                        user posted image
                                                        ЩИТО?
                                                          В библиотеке Win32API Library есть пример TabControl.
                                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                          0 пользователей:


                                                          Рейтинг@Mail.ru
                                                          [ Script Execution time: 0,2759 ]   [ 18 queries used ]   [ Generated: 22.07.19, 02:10 GMT ]