Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

DblClick на кнопке   Найти похожие ветки 

 
LDV   (2012-05-18 18:13) [0]

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


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

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


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

>Медвежонок Пятачок // Ага. На 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


 
Ega23 ©   (2012-05-19 12:39) [3]

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


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

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


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

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


 
Ega23 ©   (2012-05-19 13:51) [6]


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


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


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

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

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


 
Inovet ©   (2012-05-19 15:10) [8]

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

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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
2-1340107316
sas9568635
2012-06-19 16:01
2013.03.22
Написать процедуру задержки в эмуляторе процессора КР580


2-1333617342
gadget
2012-04-05 13:15
2013.03.22
Сервер WordApplication


15-1352728971
Дмитрий Белькевич
2012-11-12 18:02
2013.03.22
Ошибка при билде проекта. XE3


4-1259040937
Alex_C
2009-11-24 08:35
2013.03.22
"Принудительная" запись в COM-порт


15-1345025317
Думкин
2012-08-15 14:08
2013.03.22
Гарри Гаррисон