还请指教???

解决方案 »

  1.   

    外面Click只改变Windows得Zorder, 并没有改变Focus, 试试在OnDeactive事件中加入PostMessage(Handle, WM_KillFocus,0,0)试下?
      

  2.   

    看看用SETFOCUS(HWND)将焦点强行移开如何?
      

  3.   

    我个人觉得这种事情很少发生。因为可能是默认了吧。如果要是设置为默认的。直接按回车健就可以使用BUTTON健。这个问题不会影响你的程序吧。所以就算是出现点问题也不要太再意了。我也是用DELPHI6的。所以大家是同道中人。祝你好运!!!!!!!!
      

  4.   

    首先,你要的结果是在窗口丢失焦点后,然后再获得焦点。
    其次,OnDeactive事件时发生在丢失焦点以前。
    解决的方法有两个:
    1.限制鼠标不要出你的窗体
    2.修改VCL
      

  5.   

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Dragacceptfiles(form1.handle,true);
    end;这是支持文件拖放的程序设置的东东,效果和你的差不多吧,你试试
      

  6.   


    在“Hook Functions”里有个“MouseProc”,用它来试一下,就像屏蔽键盘一样,可以屏蔽鼠标事件。LRESULT CALLBACK MouseProc(
      int nCode,      // hook code
      WPARAM wParam,  // message identifier
      LPARAM lParam   // mouse coordinates
    );
      

  7.   

    提问提拔要求说清楚:
    >>是要你的程序永远有焦点是吗?如果是这样,可以做到:
    设置Application.OnDeActive事件即可!代码如下:
    procedure ForceForegroundWindow(hwnd: THandle);
    var
      hlp: TForm;
    begin
      hlp := TForm.Create(nil);
      try
        hlp.BorderStyle := bsNone;
        hlp.SetBounds(0, 0, 1, 1);
        hlp.FormStyle := fsStayOnTop;
        hlp.Show;
        mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        SetForegroundWindow(hwnd);
      finally
        hlp.Free;
      end;
    end;然后在Application.OnDeActive中添加代码:
    ForceForegroundWindow(Handle)
    Test Ok for WinXP。
      

  8.   

    我只是想试试能不能实现这个功能而已。我用的也是XP,但好像KingRom的代码并不能实现。
      

  9.   

    >>我用的也是XP,但好像KingRom的代码并不能实现。
    看看下面的可不可以?
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, AppEvnts, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        AppEvent: TApplicationEvents;
        procedure AppEventDeactivate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure ForceForegroundWindow(hwnd: THandle);
    var
      hlp: TForm;
    begin
      hlp := TForm.Create(nil);
      try
        hlp.BorderStyle := bsNone;
        hlp.SetBounds(0, 0, 1, 1);
        hlp.FormStyle := fsStayOnTop;
        hlp.Show;
        mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
        SetForegroundWindow(hwnd);
      finally
        hlp.Free;
      end;
    end;procedure TForm1.AppEventDeactivate(Sender: TObject);
    begin
      ForceForegroundWindow(Screen.Forms[0].Handle);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      ShowMessage('TEST');
    end;end.object Form1: TForm1
      Left = 192
      Top = 114
      Width = 696
      Height = 480
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object Memo1: TMemo
        Left = 15
        Top = 10
        Width = 501
        Height = 286
        Lines.Strings = (
          'Memo1')
        TabOrder = 0
      end
      object Button1: TButton
        Left = 95
        Top = 340
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
      end
      object AppEvent: TApplicationEvents
        OnDeactivate = AppEventDeactivate
        Left = 530
        Top = 60
      end
    end
      

  10.   

    我测试是可以的,不过屏幕总是要闪烁一下,你还是用Mouse Hook吧,虽然复杂,但丝好用。