我为我的服务程序做了个交互的窗体,
可是,窗体上所有的用来输入的控件都不能输入东西,但是checkbox,button等用鼠标操作的控件却行。
这是为什么??

解决方案 »

  1.   

    把代码贴出来
    看看窗体在Show得时候有异常么?
      

  2.   

    服务程序本来就不要交互的!
    你可以设置允许交互,但不推荐,作为服务是不需要直接交互的
    Windows下这么多服务程序,那个允许交互了?http://lysoft.7u7.net
      

  3.   

    服务程序一般是不用交互,可我是想通过一个交互界面进行一些程序的设置工作呀。程序很普通,就是一个窗体上放了一些checkbox,button,edit而已,checkbox,button可以交互,但edit却不能输入任何东西?输入焦点什么的都有。
    怪事?
      

  4.   

    这是main.pas主文件
    unit main;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;type
      TRsvrTransfer = class(TService)
        procedure ServiceContinue(Sender: TService; var Continued: Boolean);
        procedure ServiceExecute(Sender: TService);
        procedure ServicePause(Sender: TService; var Paused: Boolean);
        procedure ServiceShutdown(Sender: TService);
        procedure ServiceStart(Sender: TService; var Started: Boolean);
        procedure ServiceStop(Sender: TService; var Stopped: Boolean);
      private
        { Private declarations }
      public
        function GetServiceController: TServiceController; override;
        { Public declarations }
      end;var
      RsvrTransfer: TRsvrTransfer;implementationuses Unit1;{$R *.DFM}procedure ServiceController(CtrlCode: DWord); stdcall;
    begin
      RsvrTransfer.Controller(CtrlCode);
    end;function TRsvrTransfer.GetServiceController: TServiceController;
    begin
      Result := ServiceController;
    end;procedure TRsvrTransfer.ServiceContinue(Sender: TService;
    var Continued: Boolean);
    begin
      while not Terminated do
      begin
        Sleep(10);
        ServiceThread.ProcessRequests(False);
      end;
    end;procedure TRsvrTransfer.ServiceExecute(Sender: TService);
    begin
      while not Terminated do
      begin
        Sleep(10);
        ServiceThread.ProcessRequests(False);
      end;
    end;procedure TRsvrTransfer.ServicePause(Sender: TService;
    var Paused: Boolean);
    begin
      Paused := True;
    end;procedure TRsvrTransfer.ServiceShutdown(Sender: TService);
    begin
      gbCanClose := true;
      MainForm.Free;
      Status := csStopped;
      ReportStatus();
    end;procedure TRsvrTransfer.ServiceStart(Sender: TService;
    var Started: Boolean);
    begin
      Started := True;
      Svcmgr.Application.CreateForm(TMainForm, MainForm);
      gbCanClose := False;
      MainForm.Hide;
    end;procedure TRsvrTransfer.ServiceStop(Sender: TService;
    var Stopped: Boolean);
    begin
      Stopped := True;
      gbCanClose := True;
      MainForm.Free;
    end;end.
    窗体文件:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
       CnClasses, CnTrayIcon, Menus, StdCtrls, ExtCtrls, CnEdit,
      Mask, CnSpin, IdUDPBase, IdUDPClient, IdTrivialFTP, IdBaseComponent,
      IdComponent, IdTCPConnection, IdTCPClient;type
      TMainForm = class(TForm)
        CnTrayIcon1: TCnTrayIcon;
        pm1: TPopupMenu;
        j1: TMenuItem;
        N1: TMenuItem;
        N2: TMenuItem;
        pnl1: TPanel;
        pnl2: TPanel;
        pnl3: TPanel;
        pnl4: TPanel;
        btn1: TButton;
        btn2: TButton;
        btn3: TButton;
        btn4: TButton;
        lbl1: TLabel;
        lbl2: TLabel;
        lbl3: TLabel;
        chk1: TCheckBox;
        lbl4: TLabel;
        edt1: TEdit;
        edt2: TEdit;
        edt3: TEdit;
        edt4: TEdit;
        edt5: TEdit;
        chk2: TCheckBox;
        chk3: TCheckBox;
        chk4: TCheckBox;
        chk5: TCheckBox;
        lbl5: TLabel;
        lbl6: TLabel;
        lbl7: TLabel;
        EdtSavePath1: TCnEdit;
        SpnEdtInteral: TCnSpinEdit;
        lbl8: TLabel;
        IdTCPClient1: TIdTCPClient;
        IdTrivialFTP1: TIdTrivialFTP;
        lbl9: TLabel;
        lbl10: TLabel;
        lbl11: TLabel;
        lbl12: TLabel;
        edtHost: TEdit;
        edtPort: TEdit;
        edtFtpUser: TEdit;
        edtFtpPass: TEdit;
        edtFtpDir: TEdit;
        lbl13: TLabel;
        lbl14: TLabel;
        lbl15: TLabel;
        lbl16: TLabel;
        edtDbServer: TEdit;
        edtDbUser: TEdit;
        edtDbPass: TEdit;
        lbl17: TLabel;
        lbl18: TLabel;
        edtEmail: TEdit;
        edtEmailPass: TEdit;
        procedure j1Click(Sender: TObject);
        procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
        procedure FormCreate(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure btn1Click(Sender: TObject);
        procedure btn3Click(Sender: TObject);
        procedure btn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      MainForm: TMainForm;
      gbCanClose: Boolean;implementationuses main;{$R *.dfm}procedure TMainForm.j1Click(Sender: TObject);
    begin
      self.CnTrayIcon1.ShowApplication;
    end;procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      gbCanClose := gbCanClose;
      if not gbCanClose then
      begin
        self.CnTrayIcon1.HideApplication;
      end;
    end;procedure TMainForm.FormCreate(Sender: TObject);
    begin
      //FormStyle := fsStayOnTop; {窗口最前}
      //SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW); {不在任务栏显示}
      gbCanClose := False;
    end;procedure TMainForm.N2Click(Sender: TObject);
    begin
      WinExec('net stop RsvrTransfer',SW_HIDE);
    end;procedure TMainForm.btn1Click(Sender: TObject);
    begin
      self.CnTrayIcon1.HideApplication;
    end;procedure TMainForm.btn3Click(Sender: TObject);
    begin
      WinExec('net pause RsvrTransfer',SW_HIDE);
      self.btn2.Enabled := true;
      self.btn3.Enabled := false;
    end;procedure TMainForm.btn2Click(Sender: TObject);
    begin
      WinExec('net continue RsvrTransfer',SW_HIDE);
      self.btn2.Enabled := false;
      self.btn3.Enabled := true;
    end;end.