⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 delphi advstringgrid的使用
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    TempGrid: TStringGrid;
    editZ: TEdit;
    cmbZ: TComboBox;
    Edit1: TEdit;
    procedure TempGridSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure TempGridTopLeftChanged(Sender: TObject);
    procedure editZChange(Sender: TObject);
    procedure editZExit(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure cmbZChange(Sender: TObject);
    procedure cmbZExit(Sender: TObject);
    procedure editZKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure cmbZClick(Sender: TObject);
    procedure editZClick(Sender: TObject);
  private
    { Private declarations }
  public
    R,C:integer;
    CanSelected,IsEdited:Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.TempGridSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
   cmbZ.Visible:=false; editZ.Visible:=false; IsEdited:=false;
   R:=ARow; C:=ACol; CanSelected:=CanSelect;
   //Edit1.Text:=IntToStr(R)+':'+IntToStr(C);
   if C in [0..1, 5..11] then begin
      editZ.Left := TempGrid.CellRect(C,R).Left+ TempGrid.Left ;
      editZ.Top := TempGrid.CellRect(C,R).Top + TempGrid.Top ;
      editZ.Height:=TempGrid.CellRect(C,R).Bottom - TempGrid.CellRect(C,R).Top;
      editZ.Width:= TempGrid.CellRect(C,R).Right-TempGrid.CellRect(C,R).Left;
      editZ.Text:=TempGrid.Cells[C,R]; editZ.Visible:=true; editZ.SetFocus;
      end
   else {if not (C in [2,3]) then} begin
      cmbZ.Left := TempGrid.CellRect(C,R).Left+ TempGrid.Left ;
      cmbZ.Top := TempGrid.CellRect(C,R).Top + TempGrid.Top ;
      cmbZ.Height:=TempGrid.CellRect(C,R).Bottom - TempGrid.CellRect(C,R).Top;
      cmbZ.Width:= TempGrid.CellRect(C,R).Right-TempGrid.CellRect(C,R).Left;
      cmbZ.Text:=TempGrid.Cells[C,R]; cmbZ.Visible:=true; cmbZ.SetFocus;
      end;
end;

procedure TForm1.TempGridTopLeftChanged(Sender: TObject);
begin
   editZ.Visible:=false; cmbZ.Visible:=false;
end;

procedure TForm1.cmbZChange(Sender: TObject);
begin
   TempGrid.Cells[C,R]:=Trim(cmbZ.Text);
end;

procedure TForm1.editZChange(Sender: TObject);
begin
   TempGrid.Cells[C,R]:=Trim(editZ.Text);
end;

procedure TForm1.editZExit(Sender: TObject);
begin
   editZ.Visible:=false;
end;

procedure TForm1.cmbZExit(Sender: TObject);
begin
   cmbZ.Visible:=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
begin
   for i:=0 to TempGrid.ColCount-1 do TempGrid.Cells[i,0]:='标题号'+IntToStr(i);
   for i:=0 to TempGrid.ColCount-1 do
      for j:=1 to TempGrid.RowCount-1 do
         TempGrid.Cells[i,j]:=IntToStr(j)+' : '+IntToStr(i);
end;

procedure TForm1.editZKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   //Edit1.Text:=IntToStr(Key);

   //up 38  down 40 left 37 right 39
   if Key in [13, 39] then begin
      if C=TempGrid.ColCount-1 then TempGrid.LeftCol:=0
      else if (C>6) then TempGrid.LeftCol:=TempGrid.LeftCol+1;

      if C<TempGrid.ColCount-1 then TempGridSelectCell(Sender,C+1, R, CanSelected)
      else if R<TempGrid.RowCount-1 then TempGridSelectCell(Sender, 0, R+1, CanSelected);

      end
   else if Key=37 then begin
      if (C>0) then TempGridSelectCell(Sender,C-1, R, CanSelected);
      editZ.SelStart:=1;
      end
   else if Key=38	then begin
      if (R>1) then TempGridSelectCell(Sender,C, R-1, CanSelected);
      end
   else if Key=40	then begin
      if (R<TempGrid.RowCount-1) then TempGridSelectCell(Sender,C, R+1, CanSelected);
      end;
end;

procedure TForm1.cmbZClick(Sender: TObject);
begin
   IsEdited:=true;
end;

procedure TForm1.editZClick(Sender: TObject);
begin
   IsEdited:=true;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -