首先放一Panel1,在此Panel1上放一SpeedButton,然后设置Panel1的AutoSize为TRUE;
Panel1的BevelOuter为bvNone,目的使这个Panel1彻底地没有留下痕迹。
再在FROM上放ComboBox1,在它的Items属性上随便放些值。
//设置StringGrid的Column要显示的字符。
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Rows[0].Add('for you want');
StringGrid1.Rows[0].Add('測試標准');
StringGrid1.Rows[0].Add('panel');
end;
//在StringGrid的自画事件中,将两个控件摆到StringGrid相应的Cells中
//Panel1.Top:=Rect.Top+StringGrid1.Top+2中的“+2”无非是使控件显示的位置更加准确。
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (gdFocused in State) then
begin
if (StringGrid1.Cells[Acol,0]='測試標准') then
begin
ComboBox1.Left:=Rect.Left+StringGrid1.Left;
ComboBox1.Top:=Rect.Top+StringGrid1.Top+3;
ComboBox1.Width:=Rect.Right-Rect.Left+2;
ComboBox1.Visible:=true;
ComboBox1.SetFocus;
ComboBox1.Text:=StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row];
end
else
ComboBox1.Visible := False;
if (StringGrid1.Cells[Acol,0]='panel') then
begin
Panel1.Left:=Rect.Right + StringGrid1.Left - Panel1.Width;
Panel1.Top:=Rect.Top+StringGrid1.Top+2;
Panel1.Height:=Rect.Bottom-Rect.Top;
Panel1.Visible:=True;
end
else
Panel1.Visible := False;
end;
end;
//将选取到的ComboBox值赋值到StringGrid相应的Cells中。
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:=ComboBox1.Items[ComboBox1.ItemIndex];
end;
//在SpeedButton1的点击事件中做你想到做的事情。
"http://www.delphibbs.com/delphibbs/dispq.asp?lid=800526"