Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.02.2012, 20:56
lcd1232
 
Сообщения: n/a
По умолчанию Кнопка старт/стоп

Собственно хочется сделать следующее:
1. При нажатии на кнопку изменялась на ней надпись и действие (единственный нормальный вариант, который нашел - это изменение caption'а и изменение метода.
2. 3 секунды она должна быть не доступна (делается через поток, но проблема в том, что не знаю как узнать какая кнопка нажата и поэтому код получается большим)
Таких кнопок на форме не одна, а несколько.
И тут же задам еще вопрос: как включать и выключать процедуру? Нужно к примеру следующее
Код:
Procedure Start (start: boolean);
При вызове
Код:
Start(true);
Включало процедуру, при false соответственно выключалась.
Ответить с цитированием
  #2  
Старый 29.02.2012, 21:19
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Не понял, зачем поток. 3 секунды можно задать таймером. Можно даже WinAPI'шным.
Нажатая кнопка в виде объекта передается в параметре Sender метода onClick при нажатии на кнопку.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #3  
Старый 29.02.2012, 21:21
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

1. Это и есть стандартный способ.
2. Через таймер проще.

Опоздал.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #4  
Старый 29.02.2012, 21:23
lcd1232
 
Сообщения: n/a
По умолчанию

Если в том же потоке кидаешь процедуру Sleep, то форма зависает, что не есть хорошо. Можно тогда пример с таймером и как получить инфу в параметре Sender?
Ответить с цитированием
  #5  
Старый 29.02.2012, 21:29
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

В Sender передается объект, вызвавший событие.
Код:
procedure TForm1.ButtonOnClick(Sender: TObject);
begin
  (Sender as TButton).Caption := '123';
  ...
end;
Так можно работать с полями этой кнопки.
Таймер есть стандартный компонент Delphi, в котором задается интервал срабатывания и функция срабатывания.
Самое простое решение - сделать для каждой кнопки свой таймер. При нажатии на каждую кнопку запускаем ее личный таймер на 3 секунды и ждем.
Решение поинтереснее - добавлять кнопки в очередь на срабатывание, а в поле Interval таймера задавать время до ближайшего включения какой-либо кнопки. По событию таймера доставать из очереди один элемент и работать с ним.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
lcd1232 (29.02.2012)
  #6  
Старый 29.02.2012, 21:40
lcd1232
 
Сообщения: n/a
По умолчанию

Интересно. Надо будет посмотреть. Добавлю еще вопрос, дабы не создавать еще 1 тему:
Как написать текст в объекте ComboBox если style:=csDropDownList? Нужно именно то поле, которое уже сразу выбрано при запуске программы.
Ответить с цитированием
  #7  
Старый 29.02.2012, 22:02
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Никакой текст при этом не пишется, TEdit коим является это поле находится в ReadOnly, нужно выбрать ItemIndex из соответствующего списка ранне загруженного в TComboBox.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 02.03.2012, 15:01
lcd1232
 
Сообщения: n/a
По умолчанию

К сожалению на последний вопрос я так и не получил ответа, а именно:
Цитата:
как включать и выключать процедуру? Нужно к примеру следующее
Код:
Procedure Start (start: boolean);
При вызове
Код:
Start(true);
Включало процедуру, при false соответственно выключалась.
Ответить с цитированием
  #9  
Старый 02.03.2012, 21:28
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Наверное потому что невнимательно читаешь.
Цитата:
3 секунды можно задать таймером
Цитата:
Через таймер проще.
Вызывешь свою процедуру из таймера, еогда не нужно отключаешь таймер.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:56.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter