Конференция "Начинающим" » Можно ли как-то централизованно обработать клик на контролах?
 
  • Kolan © (01.04.08 18:24) [0]
    Здравствуйте,
     Мне нужно проигрывать звук (например стандартный клик) при клике на любой контрол. Точнее при любом, так сказать, удавшемся клике.
    То есть например при клике на не активный контрол, звука не должно быть.

    Может можно как-тонастроить саму систему? Этот вариант тоже подойдет.
  • Ega23 © (01.04.08 18:35) [1]

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


    AFAIK, когда ты кликаешь на неактивном контроле, он становится активным.
  • Kolan © (01.04.08 18:39) [2]
    > AFAIK, когда ты кликаешь на неактивном контроле, он становится
    > активным.

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

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

  • AIK © (01.04.08 19:18) [3]

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


    MessageBeep(0);
  • Ega23 © (01.04.08 19:19) [4]

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


    А на Enabled := False - ты и не кликнешь...  :)
  • {RASkov} © (01.04.08 19:22) [5]
    > [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;


    Может и не совсем то.... а может и совсем не то.... но фик знает... сильно не думал :)
  • AIK © (01.04.08 19:44) [6]
    А еще есть такой прикольный:  
    Windows.Beep(1000, 100)


    встречался еще с таким
    PlaySound

    (user mmSystem) но незнаю как его заставить работать, может кто подскажет
  • Ega23 © (01.04.08 19:49) [7]

    > встречался еще с таким 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;


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

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

    Что конкретно не получается? Впрочем свой вопрос задай отдельно, а не влазь в чужой :)
 
Конференция "Начинающим" » Можно ли как-то централизованно обработать клик на контролах?
Есть новые Нет новых   [134433   +22][b:0][p:0.002]