程序技巧没有什么实在的用处,看了风焱老大的贴子,有很多朋友UP.呵呵
模板一:
unit TempletForm;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Menus, ComCtrls, ToolWin, Buttons, StdCtrls, AppEvnts,
  LabelButton, TradeImage, MaskImageButton, MoveImageButton;type
  TMyForm = class(TForm)
    palUp: TPanel;
    palLeftUp: TPanel;
    imgLeftUp: TImage;
    palRightUp: TPanel;
    imgRightUp: TImage;
    palUpMid: TPanel;
    imgCaption: TImage;
    palDown: TPanel;
    imgLeftDown: TImage;
    imgRightDown: TImage;
    imgDownMin: TImage;
    palLeft: TPanel;
    palRight: TPanel;
    imgRight: TImage;
    imgCloseButton: TImage;
    imgMinButton: TImage;
    imgSizeButton: TImage;
    imgMaxButton: TImage;
    imgRestoreButton: TImage;
    imgSysIcon: TImage;
    popSystemMenu: TPopupMenu;
    N_Restore: TMenuItem;
    N_Max: TMenuItem;
    N_Min: TMenuItem;
    N_Move: TMenuItem;
    N_Size: TMenuItem;
    N_Speater: TMenuItem;
    N_Close: TMenuItem;
    palClient: TPanel;
    lbCaption: TLabel;
    CoolBarMenu: TCoolBar;
    ToolBarMenu: TToolBar;
    imgLeft: TImage;
    imgColorLeftUp: TImage;
    imgGrayCaption: TImage;
    imgGrayMenuBar: TImage;
    imgGrayRightUp: TImage;
    imgColorCaption: TImage;
    imgGrayLeftUp: TImage;
    imgColorRightUp: TImage;
    imgRightUp1: TImage;
    imgLeftUp1: TImage;
    imgColorMenubar: TImage;
    procedure imgMinButtonClick(Sender: TObject);
    procedure imgSizeButtonClick(Sender: TObject);
    procedure imgCloseButtonClick(Sender: TObject);
    procedure imgCaptionMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure imgCaptionMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure imgCaptionMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure imgSysIconMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure popSystemMenuPopup(Sender: TObject);
    procedure N_SizeClick(Sender: TObject);
    procedure N_MoveClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    canmove:boolean;
    curPoint:TPoint;
    oldPoint:TPoint;
    Canvas:TCanvas;
  protected
    procedure CreateParams(var Params:TCreateParams);override;
    procedure WMActivate(var Msg:TWMACTIVATE); message WM_ACTIVATE;
  public
    { Public declarations }
  end;var
  MyForm: TMyForm;implementation{$R *.dfm}procedure TMyForm.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  if BorderStyle<>bsNone then
    Params.Style :=WS_THICKFRAME or WS_POPUP or WS_BORDER;
end;procedure TMyForm.imgMinButtonClick(Sender: TObject);
begin
  if Application.MainForm =self then
    Application.Minimize
  else
    DefWindowProc(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;procedure TMyForm.imgSizeButtonClick(Sender: TObject);
begin
  if self.WindowState = wsNormal then
  begin
    DefWindowProc(Handle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
    imgSizeButton.Picture :=imgRestoreButton.Picture;
  end
  else
  begin
    DefWindowProc(Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
    imgSizeButton.Picture :=imgMaxButton.Picture;
  end;end;procedure TMyForm.imgCloseButtonClick(Sender: TObject);
begin
  DefWindowProc(Handle, WM_SYSCOMMAND, SC_CLOSE, 0);
end;procedure TMyForm.imgCaptionMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Button=mbLeft)and(ssLeft in Shift)then
  begin
    canmove:=true;
    Canvas:=TCanvas.Create;
    with Canvas do
    begin
      pen.Style :=psdot;
      brush.Style :=bsClear;
      pen.Width :=2;
      Pen.Mode :=pmNotXor;
      Handle :=GetDC(0);
      Rectangle(left,top,Left+width,top+height);
      curPoint.X :=X;
      curPoint.Y :=Y;
      oldPoint.X :=Left;
      oldPoint.Y :=Top;
    end;        //end with
  end;  //end if
end;procedure TMyForm.imgCaptionMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if not canmove then exit;
  with Canvas do
  begin
    Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
    oldPoint.x :=Left +X-curPoint.x;
    oldPoint.y :=Top +Y-curPoint.y;
    Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
  end;
end;procedure TMyForm.imgCaptionMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if not canmove then exit;
  with Canvas do
  begin
    Rectangle(oldPoint.x,oldPoint.y,oldPoint.x+Width,oldPoint.y+Height);
    Left :=oldPoint.x;
    Top :=oldPoint.y;
    Free;
  end;
  canmove:=not canmove;
end;procedure TMyForm.FormCreate(Sender: TObject);
begin
  lbCaption.Caption :=Caption;
end;procedure TMyForm.imgSysIconMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  PopSystemMenu.Popup(Left+ImgSysIcon.Left,Top+ImgSysIcon.Top+ImgSysIcon.Height);
end;procedure TMyForm.popSystemMenuPopup(Sender: TObject);
begin  N_Restore.Enabled :=imgSizeButton.Visible and (WindowState =wsMaximized);
  N_Max.Enabled :=imgSizeButton.Visible and (WindowState =wsNormal);
  N_Size.Enabled :=imgSizeButton.Visible ;
end;procedure TMyForm.N_SizeClick(Sender: TObject);
begin
  DefWindowProc(Handle, WM_SYSCOMMAND, SC_SIZE, 0);
end;procedure TMyForm.N_MoveClick(Sender: TObject);
begin
  DefWindowProc(Handle, WM_SYSCOMMAND, SC_MOVE, 0);
end;procedure TMyForm.FormShow(Sender: TObject);
begin
  if WindowState=wsNormal then
    imgSizeButton.Picture.Bitmap :=imgMaxButton.Picture.Bitmap
  else if WindowState=wsMaximized then
    imgSizeButton.Picture.Bitmap :=imgRestoreButton.Picture.Bitmap
end;procedure TMyForm.WMActivate(var Msg: TWMACTIVATE);
begin
  if (Msg.Active =WA_ACTIVE) or (Msg.Active =WA_CLICKACTIVE) then
  begin
    imgCaption.Picture.Bitmap :=imgColorCaption.Picture.Bitmap;
    imgLeftUp1.Picture.Bitmap :=imgColorLeftUp.Picture.Bitmap;
    imgRightUp1.Picture.Bitmap :=imgColorRightUp.Picture.Bitmap;
    coolBarMenu.Bitmap :=imgColorMenubar.Picture.Bitmap;
  end
  else begin
    imgCaption.Picture.Bitmap :=imgGrayCaption.Picture.Bitmap;
    imgLeftUp1.Picture.Bitmap :=imgGrayLeftUp.Picture.Bitmap;
    imgRightUp1.Picture.Bitmap :=imgGrayRightUp.Picture.Bitmap;
    coolBarMenu.Bitmap :=imgGrayMenubar.Picture.Bitmap;
  end;
end;end.

解决方案 »

  1.   

    模板二:
    unit TempleUnt;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, SUIForm, ComCtrls, cxGraphics, cxControls, dxStatusBar,
      DBCtrls, RzDBNav, bsSkinCtrls, bsSkinGrids, bsDBGrids, SUIImagePanel,DB,ADODB,
      StdCtrls,QComCtrls;type
      TTempleFrm = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
        FADOQuery : TADOQuery;
        Procedure DataShow;
        Procedure DataSave;
        Procedure DataEdit;
        Procedure ShowMessageEx(IntValue : Integer = 0);
        Procedure ControlET(Sender : TPanel);
        Procedure ControlEF(Sender : TPanel);
        Procedure ControlClear(Sender : TPanel);
        Procedure GetRecordInfo(Sender : TdxStatusBar);
        Procedure DataAdd;
        Procedure DataDeltete;
        Procedure DataCancel;
        Procedure DataToCom(Sender : TCustomCombo;TableName,FieldName : String);
        Function DataSetcz : Boolean;
        Procedure SaveData;
        Function CheckEx_Edt(ChildSender : TCustomEdit;vHint : String) : Boolean;
        Function CheckEx_CBX(ChildSender : TCustomCombo;vHint : String) : Boolean;
        Function iCheckEx_Edt(ChildSender : TCustomEdit;vHint : String) : Boolean;
        Function dCheckEx_Edt(ChildSender : TCustomEdit;vHint : String) : Boolean;
        Function inCheckEx_Edt(ChildSender : TCustomEdit;vHint : String) : Boolean;
        Function dnCheckEx_Edt(ChildSender : TCustomEdit;vHint : String) : Boolean;
        Function repeatInfo(TableName,FieldName,FieldValue,vHint : String ;vInt : Integer = 0) : Boolean;
        Procedure OpenDataSet(vSQLStr: String);
        Procedure OpenDataSetEX(vADOQuery : TADOQuery;vSQLStr: String);
        Function ExecDataSet(vSQLStr:String) : Boolean;
        Function Delete_Ask : Boolean;
        Function GetPriceType(dValue : String) : String;
      end;var
      TempleFrm: TTempleFrm;implementation
    Uses
      DataModuleUnt;{$R *.dfm}{ TTempleFrm }
    function TTempleFrm.CheckEx_Edt(ChildSender: TCustomEdit;
      vHint: String): Boolean;
    begin
      Result := True;
      if Trim(ChildSender.Text) = '' then
      begin
        Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整'),'提示',
          MB_OK + MB_ICONINFORMATION);
        Result := False;
        ChildSender.SetFocus;
        Exit;
      end;
    end;function TTempleFrm.CheckEx_CBX(ChildSender: TCustomCombo;
      vHint: String): Boolean;
    begin
      Result := True;
      if ChildSender.ItemIndex = -1 then
      begin
        Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整'),'提示',
          MB_OK + MB_ICONINFORMATION);
        Result := False;
        ChildSender.SetFocus;
        Exit;
      end;
    end;procedure TTempleFrm.ControlClear(Sender: TPanel);
    var
      vIndex : Integer;
    begin
      for vIndex := 0 to Sender.ControlCount - 1 do
      begin
        //..
        if Sender.Controls[vIndex] Is TCustomEdit then
          TCustomEdit(Sender.Controls[vIndex]).Clear ;
        if Sender.Controls[vIndex] Is TCustomCombo then
          TCustomCombo(Sender.Controls[vIndex]).ItemIndex := -1;
        if Sender.Controls[vIndex] Is TCustomMemo then
          TCustomMemo(Sender.Controls[vIndex]).Clear;
      end;
    end;procedure TTempleFrm.ControlEF(Sender: TPanel);
    var
      vIndex : Integer;
    begin
      for vIndex := 0 to Sender.ControlCount - 1 do
      begin
        if Sender.Controls[vIndex] Is TWinControl then
          TWinControl(Sender.Controls[vIndex]).Enabled := False;
      end;
    end;procedure TTempleFrm.ControlET(Sender: TPanel);
    var
      vIndex : Integer;
    begin
      for vIndex := 0 to Sender.ControlCount - 1 do
      begin
        if Sender.Controls[vIndex] Is TWinControl then
          TWinControl(Sender.Controls[vIndex]).Enabled := True;
      end;
    end;procedure TTempleFrm.DataAdd;
    begin
      if DataSetCZ then
      begin
        FADOQuery.Append ;
        Caption := '客房添加';
      end else
        Exit;
    end;procedure TTempleFrm.DataCancel;
    begin
      if DataSetCZ then
        Exit;
      FADOQuery.Cancel;
    end;procedure TTempleFrm.DataDeltete;
    begin
      //..
      if DataSetCZ or FADOQuery.IsEmpty then
        Exit;
      if Application.MessageBox('您确定定要删除当前记录吗?','提示',MB_OKCANCEL + MB_ICONINFORMATION) = MROK then
        FADOQuery.Delete;
    end;procedure TTempleFrm.DataEdit;
    begin
      if DataSetCZ and Not FADOQuery.IsEmpty then
        FADOQuery.Edit else
        Exit;
    end;----------------------------------------------------------
    事太多、心太乱
        
      

  2.   

    procedure TTempleFrm.DataSave;
    begin
      if DataSetCZ then
        Exit;
      SaveData;
    end;
    /// </returns>
    /// 如果返回为假,则不可以进行操作,否则可以进行操作。
    /// <returns> 
    Function TTempleFrm.DataSetCZ : Boolean;
    begin
      Result := True;
      if (FADOQuery.State = dsInsert) or (FADOQuery.State = dsEdit) then
      begin
        Result := False;
      end;
    end;procedure TTempleFrm.DataShow;
    begin
      //..
    end;procedure TTempleFrm.DataToCom(Sender: TCustomCombo;TableName,FieldName : String);
    begin
      with DataModuleFrm.LSBADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add('Select Distinct ' + FieldName + ' From ' + TableName );
        Open;
        if RecordCount <> 0 then
        begin
          First;
          Sender.Clear;
          while Not Eof do
          begin
            Sender.Items.Add(Trim(FieldByName(FieldName).AsString));
            Next;
          end;
        end;
      end;
    end;procedure TTempleFrm.GetRecordInfo(Sender: TdxStatusBar);
    begin
      //..
      if FADOQuery.Active then
      begin
        Sender.Panels[1].Text := '当前数据信息共有' + IntToStr(FADOQuery.RecordCount) + '条';
      end;
    end;procedure TTempleFrm.SaveData;
    begin
      //..
    end;procedure TTempleFrm.ShowMessageEx(IntValue: Integer);
    begin
      if IntValue= 0 then
        Application.MessageBox('恭喜您,数据操作成功','提示',MB_OK + MB_ICONINFORMATION) else
        Application.MessageBox('对不起,数据操作失败','提示',MB_ICONINFORMATION);
    end;function TTempleFrm.dCheckEx_Edt(ChildSender: TCustomEdit;
      vHint: String): Boolean;
    begin
      Try
        StrToFloat(ChildSender.Text);
      Except
        Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整'),'提示',
          MB_OK + MB_ICONINFORMATION);
        Result := False;
        ChildSender.SetFocus;
        Exit;
      end;
    end;function TTempleFrm.iCheckEx_Edt(ChildSender: TCustomEdit;
      vHint: String): Boolean;
    begin
      Try
        StrToInt(ChildSender.Text);
      Except
        Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整'),'提示',
          MB_OK + MB_ICONINFORMATION);
        Result := False;
        ChildSender.SetFocus;
        Exit;
      end;
    end;function TTempleFrm.dnCheckEx_Edt(ChildSender: TCustomEdit;
      vHint: String): Boolean;
    begin
      Try
        StrToFloat(ChildSender.Text);
        if StrToFloat(ChildSender.Text) <= 0 then
        begin
          Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整' + #13 +
            '且' + vHint + '不能为零或是小于零'),'提示',
            MB_OK + MB_ICONINFORMATION);
          Result := False;
          ChildSender.SetFocus;
          Exit;
        end;
      Except
        Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整' + #13 +
          '且' + vHint + '不能为零或是小于零'),'提示',
          MB_OK + MB_ICONINFORMATION);
        Result := False;
        ChildSender.SetFocus;
        Exit;
      end;
    end;function TTempleFrm.inCheckEx_Edt(ChildSender: TCustomEdit;
      vHint: String): Boolean;
    begin
      Try
        StrToInt(ChildSender.Text);
        if StrToInt(ChildSender.Text) <= 0 then
        begin
          Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整'+ #13 +
            '且' + vHint + '不能为零或是小于零'),'提示',
            MB_OK + MB_ICONINFORMATION);
          Result := False;
          ChildSender.SetFocus;
          Exit;
        end;
      Except
        Application.MessageBox(PChar('对不起,请您将' + vHint + '信息添写完整'+ #13 +
          '且' + vHint + '不能为零或是小于零'),'提示',
          MB_OK + MB_ICONINFORMATION);
        Result := False;
        ChildSender.SetFocus;
        Exit;
      end;
    end;function TTempleFrm.repeatInfo(TableName, FieldName, FieldValue,
      vHint: String;vInt : Integer): Boolean;
    var
      vSQLStr : String;
    begin
      Result := True;
      if vInt = 0 then
        vSQLStr := 'Select * From ' + TableName + ' where ' + FieldName + ' = ''' + FieldValue + '''';
      if vInt = 1 then
        vSQLStr := 'Select * From ' + TableName + ' where ' + FieldName + ' = ' + FieldValue ;
      OpenDataSet(vSQLStr);
      if DataModuleFrm.LSBADOQuery.RecordCount <> 0 then
      begin
        Result := False;
        Application.MessageBox(pChar('对不起,' + vHint + '信息重复,请查证后,再进行操作') ,'提示',MB_ICONINFORMATION);
        Exit;
      end;
    end;procedure TTempleFrm.OpenDataSet(vSQLStr:String);
    begin
      with DataModuleFrm.LSBADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add(vSQLStr);
        SQL.SaveToFile('a.TxT');
        Open;
      end;
    end;function TTempleFrm.ExecDataSet(vSQLStr:String): Boolean;
    begin
      Result := True;
      with DataModuleFrm.LSBADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add(vSQLStr);
        ShowMessage(vSQLStr);
        Try
          ExecSQL;
        Except
          Result := False;
          ShowMessageEx(1);
          Exit;
        end;
        ShowMessageEx(0);
      end;
    end;function TTempleFrm.Delete_Ask: Boolean;
    begin
      Result := False;
      if Application.MessageBox('您确定定要删除当前记录吗?','提示',MB_OKCANCEL + MB_ICONINFORMATION) = MROK then
        Result := True;
    end;procedure TTempleFrm.OpenDataSetEX(vADOQuery: TADOQuery; vSQLStr: String);
    begin
      with vADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add(vSQLStr);
        Open;
      end;
    end;function TTempleFrm.GetPriceType(dValue: String): String;
    begin
      //..
      OpenDataSet('Select PriceType From RoomPircewh where SPrice < ' + dValue  + ' and EPrice > ' + dValue);
      if DataModuleFrm.LSBADOQuery.RecordCount <> 0 then
        Result := DataModuleFrm.LSBADOQuery.FieldByName('PriceType').AsString;
    end;end.----------------------------------------------------------
    事太多、心太乱
        
      

  3.   

    应用例程
    unit AddRoomUnt;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, TempleUnt, cxGraphics, cxControls, dxStatusBar, ExtCtrls,
      SUIForm, SUIImagePanel, StdCtrls, SUIMemo, SUIComboBox, SUIEdit, RzLabel,
      SUIButton, bsSkinCtrls, bsSkinGrids, bsDBGrids, DBCtrls, RzDBNav,DB,
      Mask, RzEdit, RzCmboBx, ComCtrls, ImgList, Grids, DBGrids;type
      TAddRoomFrm = class(TTempleFrm)
        suiForm1: TsuiForm;
        dxStatusBar1: TdxStatusBar;
        suiImagePanel3: TsuiImagePanel;
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        suiImagePanel1: TsuiImagePanel;
        suiButton1: TsuiButton;
        suiButton2: TsuiButton;
        suiButton3: TsuiButton;
        suiButton4: TsuiButton;
        suiButton5: TsuiButton;
        suiButton6: TsuiButton;
        suiButton7: TsuiButton;
        suiButton8: TsuiButton;
        suiButton9: TsuiButton;
        Panel1: TPanel;
        RzLabel1: TRzLabel;
        RzLabel2: TRzLabel;
        RzLabel3: TRzLabel;
        RzLabel4: TRzLabel;
        RzLabel5: TRzLabel;
        RzLabel6: TRzLabel;
        RzLabel7: TRzLabel;
        RzLabel8: TRzLabel;
        RzLabel9: TRzLabel;
        RzLabel10: TRzLabel;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Label4: TLabel;
        suiCheckBox1: TsuiCheckBox;
        RoomSizeEdt: TRzNumericEdit;
        RoomPriceEdt: TRzNumericEdit;
        RoomBedEdt: TRzNumericEdit;
        CodeEdt: TRzEdit;
        FloorCBX: TRzComboBox;
        RoomTypeCBX: TRzComboBox;
        RoomStateCBX: TRzComboBox;
        RoomNameEdt: TRzEdit;
        RoomStyleCBX: TRzComboBox;
        RoomBzMemo: TRzMemo;
        suiImagePanel2: TsuiImagePanel;
        suiButton10: TsuiButton;
        suiButton16: TsuiButton;
        suiButton17: TsuiButton;
        suiButton18: TsuiButton;
        ImageList1: TImageList;
        bsSkinPanel1: TbsSkinPanel;
        RzDBNavigator1: TRzDBNavigator;
        DBGrid1: TDBGrid;
        RzLabel11: TRzLabel;
        RzComboBox1: TRzComboBox;
        RzLabel12: TRzLabel;
        RzLabel13: TRzLabel;
        Label5: TLabel;
        RSEdt: TRzNumericEdit;
        MaxRSEdt: TRzNumericEdit;
        Label6: TLabel;
        ClientSXCBX: TRzComboBox;
        RzLabel14: TRzLabel;
        procedure suiButton1Click(Sender: TObject);
        procedure suiButton2Click(Sender: TObject);
        procedure suiButton3Click(Sender: TObject);
        procedure suiButton4Click(Sender: TObject);
        procedure suiButton5Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure suiButton9Click(Sender: TObject);
        procedure suiButton8Click(Sender: TObject);
        procedure suiButton10Click(Sender: TObject);
        procedure suiButton6Click(Sender: TObject);
        procedure DBGrid1DblClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        Procedure DataShow;
        Procedure DataSave;
        Procedure DataAdd;
        Procedure DataDeltete;
        Procedure DataCancel;
        Procedure DataEdit;
        Procedure SaveData;
      end;var
      AddRoomFrm: TAddRoomFrm;implementation
    uses
      DataModuleUnt;{$R *.dfm}{ TAddRoomFrm }procedure TAddRoomFrm.DataAdd;
    begin
      inherited;
      //..
    end;procedure TAddRoomFrm.DataCancel;
    begin
      inherited;
      //..
    end;procedure TAddRoomFrm.DataDeltete;
    begin
      inherited;
      //..
    end;procedure TAddRoomFrm.DataEdit;
    begin
      inherited;
      //..
    end;procedure TAddRoomFrm.DataSave;
    begin
      inherited;end;procedure TAddRoomFrm.DataShow;
    begin
      inherited;
      begin
        CodeEdt.Text  := Trim(FADOQuery.FieldByName('Room_Code').AsString);
        FloorCBX.ItemIndex :=FloorCBX.Items.IndexOf(Trim(FADOQuery.FieldByName('Room_Floor').AsString));
        RoomTypeCBX.ItemIndex  := RoomTypeCBX.IndexOf(Trim(FADOQuery.FieldByName('Room_Type').AsString));
        RoomStateCBX.ItemIndex := RoomStateCBX.IndexOf(Trim(FADOQuery.FieldByName('Room_State').AsString));
        RoomNameEdt.Text := Trim(FADOQuery.FieldByName('Room_Name').AsString);
        RoomPriceEdt.Text := Trim(FADOQuery.FieldByName('Room_Pirce').AsString);
        RoomBedEdt.Text := Trim(FADOQuery.FieldByName('Room_vBed').AsString);
        RoomStyleCBX.ItemIndex := RoomStyleCBX.IndexOf(Trim(FADOQuery.FieldByName('Room_Style').AsString));
        RoomBzMemo.Text := Trim(FADOQuery.FieldByName('Room_Bz').AsString);
        RoomSizeEdt.Text := Trim(FADOQuery.FieldByName('Room_Size').AsString);
        RzComboBox1.ItemIndex := RzComboBox1.Items.IndexOf(FADOQuery.FieldByName('Room_QT').AsString);
        RSEdt.Text := Trim(FADOQuery.FieldByName('Room_RS').AsString);
        MaxRSEdt.Text := Trim(FADOQuery.FieldByName('Room_MaxRS').AsString);
        ClientSXCBX.ItemIndex := ClientSXCBX.Items.IndexOf(FADOQuery.FieldByName('Room_SX').AsString);
      end
    end;procedure TAddRoomFrm.SaveData;
    begin
      inherited;
      Try
        if FADOQuery.State = dsInsert then
        begin
          FADOQuery.Post;
        end else
        begin
          FADOQuery.Post;
        end;
      Except
        ShowMessageEx(1);
        Exit;
      end;
      ShowMessageEx(0);
    end;procedure TAddRoomFrm.suiButton1Click(Sender: TObject);
    begin
      inherited;
      DataAdd;
      RoomBzMemo.Lines.Clear;
      ControlET(Panel1);
      if Not SuiCheckBox1.Checked then
        ControlClear(Panel1);
    end;procedure TAddRoomFrm.suiButton2Click(Sender: TObject);
    begin
      inherited;
      DataEdit;
      ControlET(Panel1);
    end;procedure TAddRoomFrm.suiButton3Click(Sender: TObject);
    begin
      inherited;
      DataDeltete;
      ControlEF(Panel1);
      GetRecordInfo(dxStatusBar1);
    end;procedure TAddRoomFrm.suiButton4Click(Sender: TObject);
    begin
      inherited;
      DataSave;
      if Not (CheckEx_Edt(CodeEdt,CodeEdt.Hint) and CheckEx_CBX(FloorCBX,FloorCBX.Hint)
        and CheckEx_CBX(RoomTypeCBX,RoomTypeCBX.Hint) and CheckEx_CBX(RoomStateCBX,RoomStateCBX.Hint)
        and dnCheckEx_Edt(RoomSizeEdt,RoomSizeEdt.Hint) and CheckEx_Edt(RoomNameEdt,RoomNameEdt.Hint)
        and dnCheckEx_Edt(RoomPriceEdt,RoomPriceEdt.Hint) and inCheckEx_Edt(RoomBedEdt,RoomBedEdt.Hint)
        and CheckEx_CBX(RoomStyleCBX,RoomStyleCBX.Hint) and CheckEx_CBX(ClientSXCBX,ClientSXCBX.Hint) ) then
        Exit;
      SaveData;
      ControlEF(Panel1);
      GetRecordInfo(dxStatusBar1);
    end;procedure TAddRoomFrm.suiButton5Click(Sender: TObject);
    begin
      inherited;
      DataCancel;
      ControlEF(Panel1);
    end;procedure TAddRoomFrm.FormShow(Sender: TObject);
    begin
      inherited;
      ControlEF(Panel1);
      FADOQuery := DataModuleFrm.RoomHireQuery;
      with FADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add('Select * From Room');
        Open;
      end;
      DataToCom(FloorCBX,'Floorwh','Name');
      DataToCom(RoomTypeCBX,'RoomType','Name');
      DataToCom(RoomStyleCBX,'RoomStyle','Name');
      DataToCom(RoomStateCBX,'RoomState','Name');
      DataToCom(RzComboBox1,'QTXMSX_WH','Name');
      GetRecordInfo(dxStatusBar1);
    end;procedure TAddRoomFrm.suiButton9Click(Sender: TObject);
    begin
      inherited;
      Close;
    end;procedure TAddRoomFrm.suiButton8Click(Sender: TObject);
    begin
      inherited;
      RoomTypeCBX.ItemIndex := -1;
    end;procedure TAddRoomFrm.suiButton10Click(Sender: TObject);
    begin
      inherited;
      PageControl1.ActivePageIndex := 0 ;
    end;procedure TAddRoomFrm.suiButton6Click(Sender: TObject);
    begin
      inherited;
      PageControl1.ActivePageIndex := 1 ;
    end;procedure TAddRoomFrm.DBGrid1DblClick(Sender: TObject);
    begin
      inherited;
      DataShow;
      PageControl1.ActivePageIndex := 0;
    end;end.----------------------------------------------------------
    事太多、心太乱
        
      

  4.   

    当时写的,实现了Delphi面版组的功能。
    同时,也可以手动的实现如OutLookBar的那种功能。
    procedure TMainFrm.SpeedButton1Click(Sender: TObject);
    var
      I , J , K , L: Integer;   //用来作循环;
      SSpValue , ESpValue : TSpeedButton;//中间变量;
      SLeft , ELeft ,BLeft: Integer;//Left中间变量;
      STagValue : Integer;//保存当前操作控件Tag;
      SBValue , BValue : Boolean;//操作是否完成?
    begin
      BValue := False;
      SSpValue := TSpeedButton.Create(Self);
      ESpValue := TSpeedButton.Create(Self);
      STagValue := ETag;
      SBValue := True;
      while SBValue do
      begin
        for I := 0 to PageControl1.Pages[0].ControlCount - 1 do
        begin
          if PageControl1.Pages[0].Controls[I] Is TSpeedButton then
          begin
            if TSpeedButton(PageControl1.Pages[0].Controls[I]).Left = 563 then
               ESpValue := TSpeedButton(PageControl1.Pages[0].Controls[I]);
          end;
        end;
        for I := 0 to PageControl1.Pages[0].ControlCount - 1 do
        begin
          if PageControl1.Pages[0].Controls[I] Is TSpeedButton then
          begin
            if TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag = STagValue then
            begin
              SSpValue := TSpeedButton(PageControl1.Pages[0].Controls[I]);
              SSpValue.Name := 'SpValue' + IntToStr(TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag);
              SLeft := TSpeedButton(PageControl1.Pages[0].Controls[I]).Left;
              STag := TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag;
              STagValue := STag - 1;
              for J := 0 to PageControl1.Pages[0].ControlCount - 1 do
              begin
                if Not BValue then
                if PageControl1.Pages[0].Controls[J] Is TSpeedButton then
                begin
                  if TSpeedButton(PageControl1.Pages[0].Controls[J]).Tag = STagValue  then
                  begin
                    SSpValue := TSpeedButton(PageControl1.Pages[0].Controls[J]);
                    STagValue := TSpeedButton(PageControl1.Pages[0].Controls[J]).Tag;
                    ELeft := TSpeedButton(PageControl1.Pages[0].Controls[J]).Left;
                    TSpeedButton(PageControl1.Pages[0].Controls[J]).Left := SLeft;
                    SSpValue := TSpeedButton(PageControl1.Pages[0].Controls[J]);
                    SSpValue.Visible := True;
                    BValue := True;
                    for L := 0 to MTag - 2 do
                    begin
                      for K := 0 to PageControl1.Pages[0].ControlCount - 1 do
                      begin
                        if PageControl1.Pages[0].Controls[K] Is TSpeedButton then
                        begin
                          if TSpeedButton(PageControl1.Pages[0].Controls[K]).Tag = STagValue - 1  then
                          begin
                            BLeft := TSpeedButton(PageControl1.Pages[0].Controls[K]).Left;
                            TSpeedButton(PageControl1.Pages[0].Controls[K]).Left := ELeft;
                            ELeft := BLeft;
                            SSpValue := TSpeedButton(PageControl1.Pages[0].Controls[K]);
                            STagValue := TSpeedButton(PageControl1.Pages[0].Controls[K]).Tag;
                            SSpValue.Visible := True;
                          end;
                        end;
                      end;
                    end;
                    SBValue := False;
                  end;
                end;
              end;
            end;
          end;
        end;
        for K := 0 to PageControl1.Pages[0].ControlCount - 1 do
        begin
          if PageControl1.Pages[0].Controls[K] Is TSpeedButton then
          begin
            if TSpeedButton(PageControl1.Pages[0].Controls[K]).Left = 563 then
            begin
              if TSpeedButton(PageControl1.Pages[0].Controls[K]).Tag = MTag then
                SBValue := False;
            end;
          end;
        end;
      end;
      ESpValue.Left := 0 ;
      ESpValue.Visible := False;
      TVSOne;
      for I := 0 to PageControl1.Pages[0].ControlCount - 1 do
      begin
        if PageControl1.Pages[0].Controls[I] Is TSpeedButton then
        begin
          if TSpeedButton(PageControl1.Pages[0].Controls[I]).Left = 58 then
          begin
            if TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag <> 1 then
              SpeedButton1.Enabled := True
            else
              SpeedButton1.Enabled := False;
            STag := TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag;
          end 
        end;
      end;
      VShow;
    end;procedure TMainFrm.TVSOne;
    var
      I : Integer;
    begin
      for I := 0 to PageControl1.Pages[0].ControlCount - 1 do
      begin
        if PageControl1.Pages[0].Controls[I] Is TSpeedButton then
        begin
          if TSpeedButton(PageControl1.Pages[0].Controls[I]).Left = 58 then
          begin
            if TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag <> 1 then
              SpeedButton1.Enabled := True;
            STag := TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag;
          end;
        end;
      end;
      for I := 0 to PageControl1.Pages[0].ControlCount - 1 do
      begin
        if PageControl1.Pages[0].Controls[I] Is TSpeedButton then
        begin
          if TSpeedButton(PageControl1.Pages[0].Controls[I]).Left = 563 then
          begin
            if TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag <> MTag then
              SpeedButton15.Enabled := True;
            ETag := TSpeedButton(PageControl1.Pages[0].Controls[I]).Tag;
            Exit;
          end else
          SpeedButton15.Enabled := False;
        end;
      end;
    end;----------------------------------------------------------
    事太多、心太乱
        
      

  5.   

    刚刚用我家百合的项了一下。
    下边也是模板,只是功能上不一样。 private
        { Private declarations }
        procedure EnterToTab(var Msg:TMsg;var Handled:Boolean);
      public
        {Public declarations }
        FADOQuery : TADOQuery;
        FSQLStr : String;
        Procedure DataShow ;virtual;
        Procedure InitInf;
        Procedure SaveData;virtual;
        Procedure EditData;virtual;
      Published
      end;var
      Term001Frm: TTerm001Frm;implementation
    uses
      SrvMainUnt;
    {$R *.dfm}{ TTerm001Frm }
    procedure TTerm001Frm.SpeedButton7Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active)  then
      begin
        FADOQuery.Append;
      end;
    end;procedure TTerm001Frm.SpeedButton6Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active) and
        (Not FADOQuery.IsEmpty) then
      begin
        FADOQuery.Edit;
      end;
    end;procedure TTerm001Frm.SpeedButton5Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active) and
        (Not FADOQuery.IsEmpty) then
      begin
        if Application.MessageBox('您确定要删除当前记录吗?','提示',
          MB_OKCANCEL + MB_ICONINFORMATION) = MROK then
          FADOQuery.Delete;
      end;
      dxStatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(FADOQuery.RecordCount) + ' 条';
    end;procedure TTerm001Frm.SpeedButton4Click(Sender: TObject);
    begin
      if (FADOQuery.State = dsInsert) or
        (FADOQuery.State = dsEdit) then
      begin
        FADOQuery.Cancel;
        DataShow;
      end;
    end;procedure TTerm001Frm.SpeedButton3Click(Sender: TObject);
    begin
      if (FADOQuery.State = dsInsert) or
        (FADOQuery.State = dsEdit) then
      begin
        //FADOQuery.Cancel;
        with FADOQuery do
        begin
          Case FADOQuery.State of
            dsInsert : Begin
                         SaveData;
                       end;
            dsEdit   : Begin
                         EditData;
                       end;
          end;
          Try
            Post;
          Except
            Application.MessageBox('对不起,数据操作失败,请重新再试','提示',
              MB_OK + MB_ICONINFORMATION);
            Exit;
          end;
        end;
      end else
        Exit;
      Application.MessageBox('恭喜您,数据操作成功,点确定返回','提示',
         MB_OK + MB_ICONINFORMATION);
      DataShow;
      dxStatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(FADOQuery.RecordCount) + ' 条';
    end;procedure TTerm001Frm.SpeedButton9Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active) and
        (Not FADOQuery.IsEmpty) then
      begin
        FADOQuery.First;
        DataShow;
      end;
    end;procedure TTerm001Frm.SpeedButton8Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active) and
        (Not FADOQuery.IsEmpty) then
      begin
        FADOQuery.Prior;
        DataShow;
      end;
    end;procedure TTerm001Frm.SpeedButton1Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active) and
        (Not FADOQuery.IsEmpty) then
      begin
        FADOQuery.Next;
        DataShow;
      end;
    end;procedure TTerm001Frm.SpeedButton12Click(Sender: TObject);
    begin
      if (FADOQuery.State <> dsInsert) and
        (FADOQuery.State <> dsEdit) and
        (FADOQuery.Active) and
        (Not FADOQuery.IsEmpty) then
      begin
        FADOQuery.Last;
        DataShow;
      end;
    end;procedure TTerm001Frm.SpeedButton2Click(Sender: TObject);
    begin
      Close;
    end;procedure TTerm001Frm.DataShow;
    begin
      //..
    end;procedure TTerm001Frm.EditData;
    begin
      //..
    end;procedure TTerm001Frm.InitInf;
    begin
      //..
      dxStatusBar1.Panels[0].Text := '操作员:' + DataModuleFrm.user;
      with FADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add(FSQLStr);
        if DataModuleFrm.dq <> '固原市' then
          SQL.Add(' where dq = ''' + DataModuleFrm.dq + '''');
        Prepared;
        Open;
      end;
    end;procedure TTerm001Frm.SaveData;
    begin
      //..
    end;
    procedure TTerm001Frm.DBGrid1CellClick(Column: TColumn);
    begin
      Try
        DataShow;
      Except
        ;
      end;
    end;procedure TTerm001Frm.FormCreate(Sender: TObject);
    begin
      //..
      Self.BorderStyle := bsSingle;
      Self.BorderIcons := [biSystemMenu,biminimize];
      Application.OnMessage := EnterToTab;
    end;----------------------------------------------------------
    事太多、心太乱
        
      

  6.   

    procedure TTerm001Frm.FormShow(Sender: TObject);
    begin
      InitInf;
      dxStatusBar1.Panels[0].Text := '操作员:' + DataModuleFrm.user;
      dxStatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(FADOQuery.RecordCount) + ' 条';
    end;procedure TTerm001Frm.EnterToTab(var Msg: TMsg; var Handled: Boolean);
    begin
      if Msg.message=WM_KeyDown then
        if Msg.WParam=VK_Return then
          Keybd_Event(VK_Tab,0,0,0);
    end;procedure TTerm001Frm.N5Click(Sender: TObject);
    //r
      //iInputFrm: TCliInputFrm;
    begin
     {CliInputFrm := TCliInputFrm.Create(Nil);
      CliInputFrm.ShowModal; }
    end;procedure TTerm001Frm.N3Click(Sender: TObject);
    var
      SrvMainFrm: TSrvMainFrm;
    begin
      SrvMainFrm := TSrvMainFrm.Create(Nil);
      SrvMainFrm.ShowModal;
    end;procedure TTerm001Frm.N1Click(Sender: TObject);
    {ar
      CliMainFrm : TCliMainFrm; }
    begin
      {liMainFrm := TCliMainFrm.Create(Nil);
      CliMainFrm.ShowModal;}
    end;procedure TTerm001Frm.SpeedButton24Click(Sender: TObject);
    var
      STr,BDs,fieldvalue:string;
    begin
      if (combobox20.Text<>'')and(combobox21.Text<>'')and(trim(combobox22.Text)<>'') then
      with Datamodulefrm.LSBADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add(FSQLStr);
        fieldvalue:=trim(combobox22.text);
        if (dbgrid1.columns[combobox20.ItemIndex+1].field.DataType=ftstring)or
           (dbgrid1.columns[combobox20.ItemIndex+1].field.DataType=ftwidestring)
        then
        begin
          Str:=listbox1.items[combobox20.itemindex]+combobox21.Text+#39+fieldvalue+#39;
        end else
        Str:=listbox1.items[combobox20.itemindex]+combobox21.Text+fieldvalue;
        if DataModuleFrm.dq <> '固原市' then
          sql.add(' where dq = ' +''''+ DataModuleFrm.dq +''''+' and '+str)
        else Sql.Add(' where '+str);
        Prepared;
        Open;
        Bds:='找到了'+inttostr(recordcount)+'条符合条件的记录';
        dxStatusBar1.Panels[1].Text := '现有数据量:' + IntToStr(Datamodulefrm.LSBADOQuery.RecordCount) + ' 条';
        if recordcount<>0 then
        begin
          application.MessageBox(Pchar(BDs),'操作提示',mb_ok+mb_iconinformation);
          Fadoquery.Recordset:=datamodulefrm.LSBADOQuery.Recordset;
        end
        else
        begin
           application.MessageBox('对不起,没有找到相关的记录!','操作提示',mb_ok+mb_iconstop);
           initinf;
        end;
      end;
    end;procedure TTerm001Frm.ComboBox20DropDown(Sender: TObject);
    var
      i:integer;
    begin
      listbox1.Clear;
      combobox20.Clear;
      for i:=1 to dbgrid1.FieldCount-1 do
      if dbgrid1.Columns[i].Visible=true then
      begin
        combobox20.Items.Add(dbgrid1.Columns[i].Title.Caption);
        listbox1.Items.Add(dbgrid1.Columns[i].FieldName);
      end;
    end;procedure TTerm001Frm.ComboBox22DropDown(Sender: TObject);
    var
      str,fieldvalue:string;
    begin
      combobox22.Clear;
      if (combobox20.Text<>'') then
      with Datamodulefrm.LSBADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add(FSQLStr);
        if DataModuleFrm.dq <> '固原市' then
          SQL.Add(' where dq = ''' + DataModuleFrm.dq + '''');
        Prepared;
        Open;
        while not eof do
        begin
          if ComboBox22.Items.IndexOf(fieldbyname(listbox1.Items[combobox20.itemindex]).AsString) = -1 then
            combobox22.Items.Add(fieldbyname(listbox1.Items[combobox20.itemindex]).AsString);
          next;
        end;
      end;
    end;
    procedure TTerm001Frm.SpeedButton13Click(Sender: TObject);
    begin
      vPopupMenu.Popup(Mouse.CursorPos.X , Mouse.CursorPos.Y);
    end;procedure TTerm001Frm.ComboBox20Change(Sender: TObject);
    begin
      combobox21.ItemIndex:=0;
      combobox22.Clear;
    end;end.----------------------------------------------------------
    事太多、心太乱