Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.076 c