Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DblClick на кнопке


LDV ©   (2012-05-18 18:13:00) 

Нужно обрабатывать DblClick на кнопке. Отлавливаю сообщение WM_LBUTTONDBLCLK, но работает как-то криво, иногда при двойном щелчке сообщение не посылается. Есль ли другие варианты, как обработать двойной нажатие на кнопку?


Amoeba_   (2012-05-19 21:35:00) [1]


> LDV   (18.05.12 18:13)
>
> Нужно обрабатывать DblClick на кнопке.

Странного захотелось?


Inovet   (2012-05-19 15:10:00) [2]

> [7] Медвежонок Пятачок ©   (19.05.12 15:00)
> где и в каком месте вы видели подобное?

В больном воображении.


Медвежонок Пятачок   (2012-05-19 15:00:00) [3]

МОжно ведь ее делать вдавленной

зачем?
тренировать зрительную реакцию юзера?
где и в каком месте вы видели подобное?
в каком элементе стандартного итерфейса?


Ega23   (2012-05-19 13:51:00) [4]


> А нажиматься она будет изменением стиля границы? МОжно ведь
> ее делать вдавленной


У панели Canvas в паблике сидит, ты можешь её отрисовать как угодно.
И таки да, даблклик на кнопке - это гуй как минимум странный. Как минимум.


Dennis I. Komarov   (2012-05-19 13:42:00) [5]

Если на кнопке (не обязательно TButton) требуется даблклик, я бы задумался на счет переделки ГУЯ, для юзверя сея операция крайне не удобна и не понятна...


TStas   (2012-05-19 13:31:00) [6]

>Ega23 ©  А нажиматься она будет изменением стиля границы? МОжно ведь ее делать вдавленной


Ega23   (2012-05-19 12:39:00) [7]

Возьми TPanel и не парься


TStas   (2012-05-19 11:24:00) [8]

>Медвежонок Пятачок // Ага. На TGraphicControl, а рисовать его той же API ф-цией, что и кнопку рисует. Вот пример, каторый с диска Фаронова:

procedure TForm1.Button1Click(Sender: TObject);
const
 W = 150; H = 50;     // Размеры "кнопки"
 Text = 'Caption';    // Надпись на ней
var
 X, Y: Integer;       // Левый верхний угол
 R, RR: TRect;        
begin
 if Tag = 1 then
   Close    // Рисунок уже выведен. Второй щелчок на кнопке останавливает работу
 else with Canvas do  // Первый щелчок - отрисовка кнопки
 begin
   X := (Width - W) div 2;
   Y := (Height - H) div 2;
   R := Rect(X, Y, X + W, Y + H);
   // Обводим периметр кнопки:
   Rectangle(R.Left, R.Top, R.Right, R.Bottom);
   // Уменьшаем размер прямоугольника, чтобы не стереть обводку:
   InflateRect(R, -1, -1);
   // Отрисовка прямоугольника кнопки:
   DrawFrameControl(Handle, R, DFC_BUTTON, DFCS_BUTTONPUSH);
   // Отрисовка прямоугольника из точек для кнопки с фокусом:
   InflateRect(R, -4, -4);
   DrawFocusRect(R);
   RR := R;          // Запоминаем исходный прямоугольник
   // Устанавливаем шрифт:
   Font.Name := 'Times New Roman';
   Font.Size := 20;
   Font.Style :=[fsBold];
   // Получаем прямоугольник для текста:
   DrawText(Handle, PChar(Text), Length(Text), R, DT_CALCRECT);
   // Смещаем на 1 пиксель вверх и влево от центра:
   OffsetRect(R, (RR.Right - R.Right) div 2 - 1,
                 (RR.Bottom - R.Bottom) div 2 - 1);
   // Выводим светлую кромку текста:
   Font.Color := clBtnHighLight;
   DrawText(Handle, PChar(Text), Length(Text), R, 0);
   // Отказ от отрисовки фона, чтобы не стереть уже выведенное:
   SetBkMode(Handle, Transparent);
   // Выводим темную кромку текста:
   OffsetRect(R, 2, 2);
   Font.Color := clBtnShadow;
   DrawText(Handle, PChar(Text), Length(Text), R, 0);
   // Выводим основной текст:
   OffsetRect(R, -1, -1);
   Font.Color := clBlack;
   DrawText(Handle, PChar(Text), Length(Text), R, 0);
   // Изменяем кнопку
   Tag := 1;
   Button1.Caption := 'Выход'
 end
end;
А ещё через DrawFocusedControl можно рамочку "фокуса" нарисовать, а повторным вызовом стереть. Получится компонент, по виду идентичный кнопке, но работающий по-другому. И ловить ничего не надо, все события и так есть, в т. ч. DblClick


Медвежонок Пятачок   (2012-05-18 21:00:00) [9]

заменить кнопку на другой контрол, так как кнопка задумана и заточена не для даблклика


Наверх

Титульная страница Поиск, карта сайта Написать письмо