Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли как-то централизованно обработать клик на контролах?


Kolan ©   (2008-04-01 18:24:00) 

Здравствуйте,
 Мне нужно проигрывать звук (например стандартный клик) при клике на любой контрол. Точнее при любом, так сказать, удавшемся клике.
То есть например при клике на не активный контрол, звука не должно быть.

Может можно как-тонастроить саму систему? Этот вариант тоже подойдет.


{RASkov}   (2008-04-01 19:54:00) [1]

> [6] AIK ©   (01.04.08 19:44)
> встречался еще с таким PlaySound (user mmSystem) но незнаю
> как его заставить работать, может кто подскажет

Тут например что-то было с использованием PlaySound
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1206947384

Что конкретно не получается? Впрочем свой вопрос задай отдельно, а не влазь в чужой :)


Ega23   (2008-04-01 19:49:00) [2]


> встречался еще с таким PlaySound (user mmSystem) но незнаю
> как его заставить работать, может кто подскажет


procedure TAlarmDispatcherModule.PlaySound(const Action: Boolean);
var
fn : string;
begin
 if Action then
  begin
   if FAlarmList.Count =0 then Exit;
   if FSoundPlaying then Exit;
   fn := configurator.KdrParams.ParamValueByNameDef('ExeFileDir', '') + 'Res\Alarm.wav';
   if not FileExists(fn) then Exit;
   sndPlaySound(PChar(fn), SND_ASYNC or SND_LOOP);
   FSoundPlaying := True;
  end
 else
  begin
   if FSoundPlaying then
    begin
     sndPlaySound(nil, 0);
     FSoundPlaying := False;
    end;
  end;
end;


AIK   (2008-04-01 19:44:00) [3]

А еще есть такой прикольный:   Windows.Beep(1000, 100)
встречался еще с таким PlaySound(user mmSystem) но незнаю как его заставить работать, может кто подскажет


{RASkov}   (2008-04-01 19:22:00) [4]

> [0] Kolan ©   (01.04.08 18:24)
> Можно ли как-то централизованно обработать клик на контролах?

Попробуй нечто это или возьми за идею:
 TForm1 = class(TForm)
...............
 private
   ListEvent: TStringList;
   procedure Clk(Sender: TObject);
.........
 end;
........
implementation
....
procedure TForm1.Clk(Sender: TObject);
var N: Integer; P: TNotifyEvent;
begin
 N:=ListEvent.IndexOf((Sender as TControl).Name);
 Beep;
 if N>=0 then begin
  P:=nil;
  @P:=ListEvent.Objects[N];
  if Assigned(P) then P(Sender);
  ShowMessage((Sender as TControl).Name);
 end;
end;

type THControl = class(TControl);
procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
 ListEvent:=TStringList.Create;
 for N:=0 to ComponentCount-1 do
  if Components[N] is TControl then begin
   if Assigned(THControl(Components[N]).OnClick) then
     ListEvent.AddObject(THControl(Components[N]).Name, @THControl(Components[N]).OnClick);
   THControl(Components[N]).OnClick:=Clk;
  end;
end;

Может и не совсем то.... а может и совсем не то.... но фик знает... сильно не думал :)


Ega23   (2008-04-01 19:19:00) [5]


> Ну на Enabled := False я кликну, что он станет активным?


А на Enabled := False - ты и не кликнешь...  :)


AIK   (2008-04-01 19:18:00) [6]


> Мне нужно проигрывать звук (например стандартный клик) при
> клике на любой контрол


MessageBeep(0);


Kolan   (2008-04-01 18:39:00) [7]

> AFAIK, когда ты кликаешь на неактивном контроле, он становится
> активным.

Ну на Enabled := False я кликну, что он станет активным?

Тем более что:
procedure TWinControl.CMEnabledChanged(var Message: TMessage);
begin
 if not Enabled and (Parent nil) then RemoveFocus(False);
…


Ega23   (2008-04-01 18:35:00) [8]


> То есть например при клике на не активный контрол, звука
> не должно быть.


AFAIK, когда ты кликаешь на неактивном контроле, он становится активным.


Наверх

Титульная страница Поиск, карта сайта Написать письмо