Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
tviktor
1 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
#1

функция удерживания кнопки

05.03.2010, 03:19. Просмотров 2222. Ответов 7
Метки нет (Все метки)

Народ, необходимо реализовать функцию удерживания кнопки.Виполнялась процедура по удержанию кнопки на 1секунду на 2с и на 3с.Возможноли вообще реализовать в delphi.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2010, 03:19
Ответы с готовыми решениями:

Нажатие каждой кнопки приводит к ее сокрытию и показу ранее скрытой кнопки
Нажатие каждой кнопки приводит к ее сокрытию и показу ранее скрытой кнопки. При...

Как вызвать событие кнопки, если я знаю номер кнопки?
У меня на форме несколько кнопок. Как вызвать событие кнопки, если я знаю номер...

Добавить блокировку по определенным условиям кнопки(1), строки(edt) и кнопки(2)
1.Создать кнопку для добавления в список переключателей (RadioGroup1)...

Нужно написать программу, что бы при нажатии кнопки, появлялись другие кнопки, а та пропадала
То есть, нас перекидало на другую форму, но она должна быть на месте первой, и...

Как активировать кнопки при нажатии другой кнопки
Есть 1 кнопка, которая активная и 4 кнопки которые не активные вначале. По...

7
Mawrat
12824 / 5732 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
05.03.2010, 08:32 #2
Это сделать можно. Tviktor, посмотри здесь и в той же ветке чуть ниже - здесь.
0
tviktor
1 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
05.03.2010, 12:02  [ТС] #3
Я предполагал что можно зделать, я новичек в программирование и много тонкостей мне непонятно, так что есле можно с примерами.
0
tviktor
1 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
22.03.2010, 02:52  [ТС] #4
Мне неодходимо для кнопки Button на форме,я уже совсем запарился ни чего не выходит.
0
Mawrat
12824 / 5732 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
22.03.2010, 09:32 #5
Вот пример.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
procedure TForm1.Button1Click(Sender: TObject);
var
  Dot : TPoint;
begin
  //Координаты центра целевой нопки относительно левого верхнего угла
  //родительского компонента.
  Dot.X := Button2.Left + Button2.Width div 2;
  Dot.Y := Button2.Top + Button2.Height div 2;
  //Выражаем координаты относительно левого верхнего угла экрана.
  Dot := ClientToScreen(Dot);
  //Переводим пикселы в единицы mickeys.
  Dot.X := Round(Dot.X * (65535 / Screen.Width));
  Dot.Y := Round(Dot.Y * (65535 / Screen.Height));
  //Перемещаем указатель мыши на целевую кнопку.
  mouse_event(MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE, Dot.X, Dot.Y, 0, 0);
  //Эмуляция нажатия левой кнопки мыши.
  mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE, Dot.X, Dot.Y, 0, 0);
  //Эмуляция отпускания левой кнопки мыши.
  mouse_event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE, Dot.X, Dot.Y, 0, 0);
end;
 
//Целевая кнопка, по которой мы должны выполнить эмуляцию щелчка.
procedure TForm1.Button2Click(Sender: TObject);
begin
  ShowMessage('Нажата кнопка: ' + (Sender as TButton).Name);
end;
Демонстрация нажатия и удерживания кнопки:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
procedure TForm1.Button1Click(Sender: TObject);
var
  Dot : TPoint;
begin
  //Координаты центра целевой нопки относительно левого верхнего угла
  //родительского компонента.
  Dot.X := Button2.Left + Button2.Width div 2;
  Dot.Y := Button2.Top + Button2.Height div 2;
  //Выражаем координаты относительно левого верхнего угла экрана.
  Dot := ClientToScreen(Dot);
  //Переводим пикселы в единицы mickeys.
  Dot.X := Round(Dot.X * (65535 / Screen.Width));
  Dot.Y := Round(Dot.Y * (65535 / Screen.Height));
  //Перемещаем указатель мыши на целевую кнопку.
  mouse_event(MOUSEEVENTF_MOVE or MOUSEEVENTF_ABSOLUTE, Dot.X, Dot.Y, 0, 0);
  //Эмуляция нажатия левой кнопки мыши.
  mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE, Dot.X, Dot.Y, 0, 0);
  //Для удержания кнопки нажатой, следует выполнить эмуляцию отжатия
  //позже - через какой-то промежуток времени или по какому-либо событию.
  //Обрабатываем поступившие сообщения.
  Application.ProcessMessages;
  //Пауза 3 секунды.
  Sleep(3000);
  //Эмуляция отпускания левой кнопки мыши.
  mouse_event(MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE, Dot.X, Dot.Y, 0, 0);
end;
 
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Label1.Caption := 'Удерживается нажатой кнопка: ' + (Sender as TButton).Name;
end;
 
procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Label1.Caption := 'Отпущена кнопка: ' + (Sender as TButton).Name;
end;
1
tviktor
1 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
23.03.2010, 01:38  [ТС] #6
Может я что-то не понемаю, мне необходимо чтоб при нажатии на Button1 выдовалась одна надпись, а при удержании этойже кнопки более 2 секунд выдовалась другая надпись.
0
Mawrat
12824 / 5732 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
23.03.2010, 09:16 #7
Ясно. Это совсем другое. Здесь нужно не удерживать кнопку, а запрограммировать реакцию на различную длительность удерживания кнопки пользователем.
Это можно сделать например, при помощи компонента TTimer. - Его надо положить на форму. В инспекторе объектов задать его свойство:
Interval = 1000 - это 1000 мс = 1 сек.
Через закладку Events инспектора объектов для TTimer создать обработчик события OnTimer. Далее код можно оформить, например, так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    FTick : Integer;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Inc(FTick);
end;
 
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //Сброс счётчика срабатываний таймера. Это у нас счётчик секунд.
  FTick := 0;
  //Запуск таймера.
  Timer1.Enabled := True;
end;
 
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //Останов таймера.
  Timer1.Enabled := False;
 
  //Реакция, зависящая от значения счётчика.
 
  //В диапазоне квадратная скобка показывает, что граница включена,
  //круглая - что граница исключена.
  case FTick of
    //Кнопка удерживалась менее 1 сек.
    0 :
      begin
        ShowMessage('Менее 1 сек.');
      end;
    //Кнопка удерживалась [1 - 2) сек.
    1 :
      begin
        ShowMessage('[1 - 2) сек.');
      end;
    //Кнопка удерживалась [2 - 3) сек.
    2 :
      begin
        ShowMessage('[2 - 3) сек.');
      end;
    //Кнопка удерживалась [3 - 4) сек.
    3 :
      begin
        ShowMessage('[3 - 4) сек.');
      end;
    //Кнопка удерживалась 4 и более сек.
    else
      begin
        ShowMessage('4 и более сек.');
      end;
  end;
end;
 
end.
1
tviktor
1 / 0 / 0
Регистрация: 02.03.2010
Сообщений: 21
24.03.2010, 01:11  [ТС] #8
Спасибо все получилось!!
0
24.03.2010, 01:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2010, 01:11

Бешенные кнопки». Изобразить игровое поле, по которому будут двигаться в произвольном порядке кнопки и другие элементы различного размера. Задача игро
Бешенные кнопки». Изобразить игровое поле, по которому будут двигаться в...

Delphi 7. При нажатии на ALT пропадают кнопки и радио-кнопки. Что сделать что-бы не пропадали?
Delphi 7. При нажатии на ALT пропадают кнопки и радио-кнопки в запущенной...

Активация кнопки по нажатию кнопки)
Как сделать чтобы по нажатии одной кнопки становилась активной вторая??


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru