问题来源:
http://www.cnblogs.com/del/archive/2008/05/14/1089344.html#1196271
本例效果图:
代码文件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Grids;
type
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure LabeledEdit2KeyPress(Sender: TObject; var Key: Char);
procedure LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
procedure LabeledEdit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
{自定义的类, 用于显示字符列表}
TMyClass = class(TStringGrid)
private
FCharList: string;
procedure SetCharList(const str: string);
public
constructor Create(AOwner: TComponent); override;
procedure SetChar(ind: Integer; char: Char);
property CharList: string read FCharList write SetCharList;
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
MyTable: TMyClass;
procedure TForm1.FormCreate(Sender: TObject);
begin
LabeledEdit1.EditLabel.Caption := '字符列表';
LabeledEdit2.EditLabel.Caption := '插入位置(数字)';
LabeledEdit3.EditLabel.Caption := '要插入的字符(字母)';
MyTable := TMyClass.Create(Self);
MyTable.Parent := Self;
MyTable.Left := 8;
MyTable.Top := 12;
end;
procedure TForm1.LabeledEdit2KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9']) then Key := #0;
end;
procedure TForm1.LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['A'..'Z', 'a'..'z']) then
Key := #0
else TLabeledEdit(Sender).SelectAll;
end;
procedure TForm1.LabeledEdit1Change(Sender: TObject);
begin
MyTable.CharList := LabeledEdit1.Text;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
c: Char;
begin
if LabeledEdit3.Text = '' then Exit;
i := StrToIntDef(LabeledEdit2.Text, 0);
c := LabeledEdit3.Text[1];
MyTable.SetChar(i, c);
LabeledEdit1.Text := MyTable.FCharList;
end;
{ 下面是 TMyClass 的代码 }
//建立时调整 StringGrid 的外观
constructor TMyClass.Create(AOwner: TComponent);
begin
inherited;
FixedCols := 0;
FixedRows := 0;
RowCount := 1;
ColCount := 3;
Font.Size := 10;
Font.Color := clRed;
Font.Style := [fsBold];
DefaultColWidth := DefaultRowHeight;
Height := DefaultRowHeight + 4;
Width := (DefaultColWidth + 1) * ColCount + 3;
end;
//赋予字符列表
procedure TMyClass.SetCharList(const str: string);
var
i: Integer;
begin
if str = '' then Rows[0][0] := '' else
begin
FCharList := str;
ColCount := Length(str);
for i := 0 to ColCount - 1 do Rows[0][i] := str[i+1];
Width := (DefaultColWidth + 1) * ColCount + 3;
end;
end;
//让字符居中
procedure TMyClass.DrawCell(ACol, ARow: Integer; ARect: TRect;
AState: TGridDrawState);
var
str: string;
begin
inherited;
Canvas.FillRect(ARect);
str := Cells[ACol,ARow];
Canvas.TextRect(ARect, str, [tfSingleLine, tfCenter, tfVerticalCenter]);
end;
//插入字符
procedure TMyClass.SetChar(ind: Integer; char: Char);
var
s1,s2: string;
i: Integer;
begin
if ind > Length(FCharList) then
i := Length(FCharList)
else i := ind;
s1 := Copy(FCharList, 0, i);
s2 := Copy(FCharList, i+1, Length(FCharList));
FCharList := s1 + char + s2;
SetCharList(FCharList);
end;
end.
窗体设计:
object Form1: TForm1
Left = 384
Top = 206
Caption = 'Form1'
ClientHeight = 202
ClientWidth = 255
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesigned
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object LabeledEdit1: TLabeledEdit
Left = 8
Top = 75
Width = 227
Height = 21
EditLabel.Width = 61
EditLabel.Height = 13
EditLabel.Caption = 'LabeledEdit1'
TabOrder = 0
OnChange = LabeledEdit1Change
end
object LabeledEdit2: TLabeledEdit
Left = 8
Top = 123
Width = 121
Height = 21
EditLabel.Width = 61
EditLabel.Height = 13
EditLabel.Caption = 'LabeledEdit2'
TabOrder = 1
OnKeyPress = LabeledEdit2KeyPress
end
object LabeledEdit3: TLabeledEdit
Left = 8
Top = 167
Width = 121
Height = 21
EditLabel.Width = 61
EditLabel.Height = 13
EditLabel.Caption = 'LabeledEdit3'
TabOrder = 2
OnKeyPress = LabeledEdit3KeyPress
end
object Button1: TButton
Left = 160
Top = 165
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 3
OnClick = Button1Click
end
end