Главная страница
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.051 c
15-1332859127
Unknown user
2012-03-27 18:38
2013.03.22
Структура БД в XML


2-1332312465
TKN
2012-03-21 10:47
2013.03.22
UpdateSql


15-1353344955
Пит
2012-11-19 21:09
2013.03.22
Delphi 7: неверное предупреждение компилятора


15-1337416388
alexdn
2012-05-19 12:33
2013.03.22
Музыка


2-1328870827
Константин
2012-02-10 14:47
2013.03.22
Можно ли имена компонентов формировать программго?