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

Вниз

Как сделать так чтобы пользователь не нажал на кнопку много раз?   Найти похожие ветки 

 
RASkov   (2006-10-07 00:25) [40]

> [36] Ketmar ©   (07.10.06 00:14)

А если серьезно... то ты это имел ввиду или нет?

procedure TForm2.Button1Click(Sender: TObject);
begin
(Sender as TButton).OnClick := nil;
SendC;
(Sender as TButton).OnClick := Button1Click;
end;

то так не пашет:)


 
RASkov   (2006-10-07 00:26) [41]

> то так не пашет:)

т.е. не отвечает на вопрос...


 
Ketmar ©   (2006-10-07 00:27) [42]

>[40] RASkov 7-Oct-2006, 00:25
>то так не пашет:)
естественно. потому что Application.ProcessMessages() забывать тоже не надо. это просто альтернатива "Enabled", не более. причём кривая.

я просто пояснял, что есть "снять обработчик".


 
velimir ©   (2006-10-07 00:27) [43]

To Ketmar: Спасибо за наводку на автора, а то у меня тока какой-то В. Понамарев...

А насчет отношения к жизни взгляды у нас с тобой совпадают ;-)


 
Ketmar ©   (2006-10-07 00:29) [44]

>[43] velimir(c) 7-Oct-2006, 00:27
>Спасибо за наводку на автора
можешь завести отдельную тему с вопросом "что бы почитать о...". насоветуют кучу хорошей литературы. %-) советовать, что читать -- это мы любим. %-)


 
velimir ©   (2006-10-07 00:31) [45]

To Ketmar: Можешь начинать советовать, я записываю ;)


 
velimir ©   (2006-10-07 00:32) [46]

To Ketmar: И лучше не только авторов, но и названия книг!!! Заранее благодарен!!!


 
Ketmar ©   (2006-10-07 00:34) [47]

пока эту осиль. а потом, как вопросы появятся, спрашивай дальше. %-)

главное -- никогда-ни-за-что не читай флёнова и архангельского. %-)


 
RASkov   (2006-10-07 00:35) [48]

> [42] Ketmar ©   (07.10.06 00:27)

Ну в итоге вот то что надо автору:

procedure TForm2.Button1Click(Sender: TObject);
begin
 (Sender as TButton).Enabled := False;
 SendC;
 Application.ProcessMessages;
 (Sender as TButton).Enabled := True;
end;

По твоему мнению опять что-то не так?


 
velimir ©   (2006-10-07 00:40) [49]

ТО RASkov: Спасибо! Я уже понял как оно будет работать!!!

ТО Ketmar: Уже скачиваю "Программирование для Microsoft Windows на С" - Чарльз Петзольд. Всего-то 80Мб... Или ты советовал другую книгу? Можешь название точное дать?

PS. Пономарева тоже читать не стоит %-)


 
RASkov   (2006-10-07 00:45) [50]

Мое подозрение - от того что происходит в SendC - что и этот метод может не помочь. Например в SendC создается поток и выполняется какоето время...
Ну мож я и обманываюсь:)


 
Ketmar ©   (2006-10-07 00:48) [51]

>[48] RASkov 7-Oct-2006, 00:35
>По твоему мнению опять что-то не так?
есть мелочи, в принципе. но работать будет. %-)

>[49] velimir(c) 7-Oct-2006, 00:40
>ТО Ketmar: Уже скачиваю "Программирование для Microsoft
>Windows на С" - Чарльз Петзольд.
кажись, оно. не помню уже -- давно было. %-)


 
velimir ©   (2006-10-07 00:50) [52]

RASkov, не обманываешься... Но все равно я счаз проверить не смогу...
Но я думаю должно сработать!


 
Германн ©   (2006-10-07 00:52) [53]

Ненавижу, когда процедуры общения с внешним кстройством запихивают в обработчик нажатия кнопки. Я бы предпочел иной вариант:


 procedure WMSendCommandToDevice(var Mes: TMessage); message WM_SendCommandToDevice;

 procedure TfmMain.btnOneClick (Sender: TObject)
 begin
    btnOne.Enabled := false;
    PostMessage(Handle,WM_SendCommandToDevice,0,0);
 end;

 procedure WMSendCommandToDevice(var Mes: TMessage);
 begin
//вызываем процедуру отсылки на девайс
    SendC;
//Ждем 1 секунду пока отработает девайс
    sleep(1000);
    btnOne.Enabled := true;
 end;


 
RASkov   (2006-10-07 00:53) [54]

> [51] Ketmar ©   (07.10.06 00:48)
> >[48] RASkov 7-Oct-2006, 00:35
> >По твоему мнению опять что-то не так?
> есть мелочи, в принципе. но работать будет. %-)

Не сочти за "докапывание" хотелось бы узнать про "мелочи", чесное слово. Без смеха и шуток.


 
Ketmar ©   (2006-10-07 00:53) [55]

>[53] Германн(c) 7-Oct-2006, 00:52
>Я бы предпочел иной вариант
не пугай новичков. %-))


 
Ketmar ©   (2006-10-07 00:55) [56]

>[54] RASkov 7-Oct-2006, 00:53
>Не сочти за "докапывание" хотелось бы узнать про "мелочи"
собственно, мелочь одна, она де главная: UI заморозится. а потом скопом выполнит всё, что юзер успел накликать. %-)


 
velimir ©   (2006-10-07 00:57) [57]

ТО Германн: А чем плохо если, вся прога посвещена работе с внешним девайсом и обращения к нему идет прямо с обработки события OnClick?


 
RASkov   (2006-10-07 00:58) [58]

> [53] Германн ©   (07.10.06 00:52)

И опять же здесь будет зависить SendC т.е. как она реализована.
А чем лучше послать "себе" сообщение и там отработать, чем отработать в нажатии кнопки? - это про этот конкретный пример.


 
Ketmar ©   (2006-10-07 00:59) [59]

>[58] RASkov 7-Oct-2006, 00:58
в этом конкретном -- избавлен от проблем с Application.ProcessMessages(), как минимум. да и всяко изящней. а вдруг захочется ещё пункт меню привинтить? и хоткей? и по таймеру?


 
RASkov   (2006-10-07 01:01) [60]

> [56] Ketmar ©   (07.10.06 00:55)

Понял. Ну это как реализована SendC есче. И это по всей видимости ответ на мой вопрос Германну. Хотя...


 
RASkov   (2006-10-07 01:03) [61]

> [59] Ketmar ©   (07.10.06 00:59)

Согласен. Все понятно. Спасибо.


 
velimir ©   (2006-10-07 01:05) [62]

Я все же сделаю по [48], про очень много кнопок, который много разных функций юзают... И у меня все работает кроме одного пунктика, что от перекликов не защищен... Но и [53] я тоже буду иметь ввиду на будущее.


 
Германн ©   (2006-10-07 01:09) [63]


> RASkov   (07.10.06 01:01) [60]
>
> > [56] Ketmar ©   (07.10.06 00:55)
>
> Понял. Ну это как реализована SendC есче. И это по всей
> видимости ответ на мой вопрос Германну. Хотя...

Мой вариант не зависит никак от реализации SendC. Соль именно в Post. А вообще использование PostMessage в обработчиках очень полезно и в ряде других случаев.


 
Palladin ©   (2006-10-07 01:10) [64]

хем (дубль два, долго терпел :), но надеялся что [39] возымеет действие... отнюдь... ), наглядность использования tag, для тех кто недогнал что это просто аттрибут класса и никаких ожиданий сообщений системы не требует для догона что он уже не тот

 TForm1 = class(TForm)
   Button1: TsButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

...

Type
TMyThread=Class(TThread)
 Protected
  Procedure Execute; override;
End;

Procedure TMyThread.Execute;
Begin
Sleep(10000);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
If Button1.Tag=0 Then
 Begin
  Button1.Tag:=1;
  With TMyThread.Create(False) Do
   Begin
    FreeOnTerminate:=True;
    While not Terminated Do
     Begin
      Sleep(100);
      Application.ProcessMessages;
     End;
   End;
  Button1.Tag:=0;
 End Else ShowMessage("Фигушки, есче в процессе!");
end;


 
RASkov   (2006-10-07 01:11) [65]

А там в [53], по идее, в параметрах PostMessage(Handle, WM_SendCommandToDevice, 0, 0); в место нулей можно передавать какого Sendera заЕнаблить.


 
Ketmar ©   (2006-10-07 01:15) [66]

>[64] Palladin(c) 7-Oct-2006, 01:10
а зачем тут тэг вообще? запретить кнопку нафиг, и все проблемы. %-)


 
Германн ©   (2006-10-07 01:15) [67]


> RASkov   (07.10.06 01:11) [65]
>
> А там в [53], по идее, в параметрах PostMessage(Handle,
> WM_SendCommandToDevice, 0, 0); в место нулей можно передавать
> какого Sendera заЕнаблить.

Конечно можно.


 
velimir ©   (2006-10-07 01:15) [68]

ТО Palladin: Не вижу принципиальной разницы в использовании tag или enabled. Ключевая штучка Application.ProcessMessages;


 
Ketmar ©   (2006-10-07 01:16) [69]

>[64] Palladin(c) 7-Oct-2006, 01:10
ну и, коли уж пишешь так длинно -- ну не ленись ты делать try ... finally. %-)


 
Германн ©   (2006-10-07 01:17) [70]


> velimir ©   (07.10.06 01:15) [68]
>
> ТО Palladin: Не вижу принципиальной разницы в использовании
> tag или enabled.

Надень очки :-) То бишь почитай книжки. Разница именно принципиальная! Но я всё равно против.


 
Ketmar ©   (2006-10-07 01:17) [71]

>[68] velimir(c) 7-Oct-2006, 01:15
>Не вижу принципиальной разницы
вообще-то разница есть -- для юзера. но это дело вкуса. просто некоторые особо одарённые юзеры могут перепугаться запрещённой кнопки -- "как так? работает только один раз?"

правда, другие могут раздражаться от окошка "занят я"... %-)


 
Palladin ©   (2006-10-07 01:20) [72]


> [69] Ketmar ©

издеваешься?? лениво :) главное донести, дальше пусть сами думают...
хотя конечно, ты прав, все таки "начинающим"... хотя все равно больше одного потока не запустится...


> [68] velimir ©

application.processmessages был для чтоб
1. приложение не "зависло"
2. сообщение showmessage сработало для наглядности
оно и без него (цикла while с sleep(100)) так же отработает


 
velimir ©   (2006-10-07 01:21) [73]

ТО Ketmar: Как раз необходимость возникла именно из-за "одоренности" юзеров %-( %-)


 
RASkov   (2006-10-07 01:24) [74]

> [72] Palladin ©   (07.10.06 01:20)

В примере [64] строчка
While not Terminated Do
помоему к Application относится а не к потоку...
както страно выполняется (я откомпилировал).


 
Ketmar ©   (2006-10-07 01:24) [75]

>[72] Palladin(c) 7-Oct-2006, 01:20
>равно больше одного потока не запустится...
а вдруг что-нибудь таки упадёт? "начинающим" же, как ты верно заметил... %-)


 
Ketmar ©   (2006-10-07 01:25) [76]

>[74] RASkov 7-Oct-2006, 01:24
with видел? %-)


 
RASkov   (2006-10-07 01:25) [77]

> > [72] Palladin ©   (07.10.06 01:20)

Но суть не в этом и... ясна.:)


 
RASkov   (2006-10-07 01:26) [78]

> [76] Ketmar ©   (07.10.06 01:25)

Видел и поэтому написал
> помоему к Application относится а не к потоку...

так как откомпилил и странное поведение при нажатии кнопки...


 
Ketmar ©   (2006-10-07 01:26) [79]

кстати, да. косяк-с. FreeOnTerminate? и проверка свойства у объекта, который порушили нафиг? %-)


 
RASkov   (2006-10-07 01:26) [80]

> > помоему к Application относится а не к потоку...



Страницы: 1 2 3 4 5 6 вся ветка

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

Наверх




Память: 0.63 MB
Время: 0.043 c
3-1157698560
angelsaint
2006-09-08 10:56
2006.11.05
как сделать ввод дат "до н.э."


2-1161183115
Mb
2006-10-18 18:51
2006.11.05
Редактирование БД


15-1160767066
ProgRAMmer Dimonych
2006-10-13 23:17
2006.11.05
Помогите с задачей, плз


2-1161336939
Gloomer
2006-10-20 13:35
2006.11.05
Посоветуйте простую компоненту для ввода вещественных чисел


15-1161264635
Firefly
2006-10-19 17:30
2006.11.05
Apache и PHP на HP-UX