На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Клик на Splitter
    Привет всем! Скажите пожалуйста, как ЛУЧШЕ всего отловить и обработать клик на Splitter ?
      стандартными средствами именно клик отловить нельзя, можно отловить событие OnMoved, происходящее в зависимости от свойства ResizeStyle.
        Цитата OlegG,3.02.04, 08:01
        Привет всем! Скажите пожалуйста, как ЛУЧШЕ всего отловить и обработать клик на Splitter ?

        Для сплиттера пиши ловушку на WM_LBUTTONDOWN - как писать ловушки - можно посмотреть в FAQ для других типов ловушек.
        Сообщение отредактировано: Zoobastik -
          можно создать свой сплиттер и обявить у него эвент OnClick, т.к. TSplitter наследник TControl, правда через TGraphicControl - вобщем можна попробовать...

          Добавлено в :
          если не получится со стандартным TSplitter - то можно по другому - я делал свой сплиттер, он работает как обычный + на нем можно размещать др. контролы (как панель) и только что я объявил у него OnClick - работает ...
            Цитата Zoobastik,3.02.04, 06:58
            Для сплиттера пиши ловушку на WM_LBUTTONDOWN - как писать ловушки - можно посмотреть в FAQ для других типов ловушек.

            Да это понятно, только не WM_LBUTTONDOWN а WM_LBUTTONCLICK. Я же спрашиваю как лучше...
              Цитата OlegG,3.02.04, 10:53
              только не WM_LBUTTONDOWN а WM_LBUTTONCLICK

              Смысл - написать не свое сообщение WM_LBUTTONCLICK, а использовать уже имеющееся в Windows (и это WM_LBUTTONDOWN, его и надо ловить)

              Как лучше? - а как можно хуже? ;) - по-моему все однозначно.
                Цитата Zoobastik,3.02.04, 08:05
                Смысл - написать не свое сообщение WM_LBUTTONCLICK, а использовать уже имеющееся в Windows (и это WM_LBUTTONDOWN, его и надо ловить)

                WM_LBUTTONCLICK - это стандартное сообщение Windows (уже имеющееся)
                Цитата Zoobastik,3.02.04, 08:05
                Как лучше? - а как можно хуже? - по-моему все однозначно.

                Существует несколько путей отловить сообщение - подправить/написать свой компонент, через объект Application...
                Сообщение отредактировано: OlegG -
                  Цитата OlegG,3.02.04, 11:13
                  Цитата

                  WM_LBUTTONCLICK - это стандартное сообщение Windows

                  Как мне кажется ты путаешь сообщения Windows и сообщения Delphi (посмотрел справочник по WinAPI на русском - там именно то, что я написал - к сожалению он не полный, а SDK под рукой нет, так что на 100% не уверен).

                  Написать можно как procedure Splitter1.Click(..); message WM_LBUTTONDOWN;
                  Не уверен, что все правильно - на VCL почти не прогил (как и на API :))
                    Цитата To Zoobastik
                    When you move your mouse and click a button, a huge number of messages are generated, including WM_MOUSEMOVE for each movement of the mouse, WM_LBUTTONDOWN when the button goes down, WM_LBUTTONCLICK when the button is released

                    Взято из "Using Visual C++ 6"
                    Сообщение отредактировано: OlegG -
                      Цитата OlegG,3.02.04, 12:10
                      Взято из "Using Visual C++ 6"

                      Назвать можно как угодно - имхо WM_LBUTTOCLICK - это то же, что и WM_LBUTTONUP (или как там) :)

                      Вообще мож я и не прав. Никогда не слеплял VCL и API (как только слегка разобрался в API, так сразу на VCL полностью забил)
                        Дак всё-таки, как лучше всего отловить и обработать клик на Splitter ?
                          Хм.. у него даже хэндла нет :(
                          А ведь onMoved вызывается при нажатой кнопке мыши?
                            Да, по-другому его сдвинуть нельзя...
                              а без движения не вызывается?
                                неа :(
                                  Тогда копай его исходники, смотри как там сделано onMoved
                                    Да, придётся... :(
                                      Цитата
                                      Song, 3.02.04, 16:34
                                      Тогда копай его исходники
                                      +
                                      Цитата
                                      OlegG, 3.02.04, 16:43
                                      Да, придётся

                                      а посмотреть Пост #4 - не судьба? <_<
                                      (особенно два последних слова в нем)
                                        Я просто думал, что получится обойтись "малой кровью", без редактирования или создания производных классов... Впринципе у меня так сделано, но через Application.OnMessage... Не нравить мне этот способ... <_<
                                        Под словом "так" я имею ввиду "без редактирования или создания производных классов".
                                        Сообщение отредактировано: OlegG -
                                          Натыкался на эту тему в поисках, отвечу для тех, кто возможно придет.
                                          ExpandedWrap disabled
                                            type
                                              TSplitterEx = class(ExtCtrls.TSplitter)
                                              public
                                                procedure Click; override;
                                              end;
                                             
                                              TSplitter = class(TSplitterEx); // magic!
                                             
                                              TForm1 = class(TForm)
                                              ...
                                              end;
                                             
                                            ...
                                             
                                            procedure TSplitterEx.Click;
                                            begin
                                              ...
                                            end;


                                          Можно запоминать координаты, перекрывая таким же образом MouseUp.
                                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                          0 пользователей:


                                          Рейтинг@Mail.ru
                                          [ Script execution time: 0,0524 ]   [ 17 queries used ]   [ Generated: 25.04.24, 14:08 GMT ]