浑人的一个问题---你要有耐心才行!(100分)

  • 主题发起人 主题发起人 autumn
  • 开始时间 开始时间
A

autumn

Unregistered / Unconfirmed
GUEST, unregistred user!
要实现以下功能:怎么办?
--------------
|TComboBox | TEdit  |      
--------------------------
|TComboBox | TEdit  |      
--------------------------
|.. |.. |
--------------------------
是否用TStringGrid 或是TDrawGrid
如果是,该如何操作?重奖。
 
用dbgrid is very well
 
没看明白什么意思
 
you'd better use a component or write a new componet.
 
在Tstringgrid.ondrawcell中添加如下代码:
var tempcombo:Tcombobox;
tempedit:Tedit;
begin
if acol=1 then
begin
tempcombo:=Tcombobox.create(tempcombo);
tempcombo.parent:=form1.stringgrid1;
tempcombo.Left := Rect.Left + stringGrid1.Left;
tempcombo.Top := Rect.Top + stringGrid1.top;
tempcombo.Width := Rect.Right - Rect.Left;
temcombo.Height := Rect.Bottom - Rect.Top;
end;
if acol=2 then
begin
tempedit:=Tedit.create(tempedit);
tempedit.parent:=form1.stringgrid1;
tempedit.Left := Rect.Left + stringGrid1.Left;
tempedit.Top := Rect.Top + stringGrid1.top;
tempedit.Width := Rect.Right - Rect.Left;
tempedit.Height := Rect.Bottom - Rect.Top;

end;
end;
大致如此,注意该控件的释放,
 
如果第一行添完了
可以继续填第2行....
我用dbgrid,没有数据库啊!?
 
接上面一贴:


鼠表点击时才出现编辑框或组合框不是更好吗?
另外组合框的内容可以在程序中添加也可从一表中读取,
这样就可是用户度身定作自己的组合框
1.combobox1.item1.add("string of your program")
2.table1.open;
while not table1.eof do
begin
combobox1.items.add(table1[1].asstring);
table1.next;
end;
 
可以用StringGrid,在cell里面用ComboBox、edit来编辑数据,
在Form中放一个StringGrid,一个ComboBox和一个edit,
程序大抵如下,还需你进一步完善,

unit Unit1;

interface

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

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Edit1: TEdit;
ComboBox1:TComboBox;
procedure FormCreate(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure Edit1Change(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
x,y:integer;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Visible:=False;
ComboBox1.Visible:=False;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
x:=aCol;
y:=aRow;
if (gdFocused in State) then
begin
if aCol = 1 then
begin
Edit1.Text := StringGrid1.Cells[x,y];
Edit1.Left := Rect.Left + StringGrid1.Left + 2;
Edit1.Top := Rect.Top + StringGrid1.top + 2;
Edit1.Width := Rect.Right - Rect.Left;
Edit1.Height := Rect.Bottom - Rect.Top;
Edit1.Visible := True;
end;

if aCol = 0 then
begin
ComboBox1.Text := StringGrid1.Cells[x,y];
ComboBox1.Left := Rect.Left + StringGrid1.Left + 2;
ComboBox1.Top := Rect.Top + StringGrid1.top + 2;
ComboBox1.Width := Rect.Right - Rect.Left;
ComboBox1.Height := Rect.Bottom - Rect.Top;
ComboBox1.Visible := True;
end;
end else
begin
Edit1.Visible:=False;
ComboBox1.Visible:=False;
end;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
//判断数据有效性
StringGrid1.Cells[x,y]:=Edit1.Text;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
StringGrid1.Cells[x,y]:=ComboBox1.Text;
end;

end.
 
hawkview的方法老是循环,又说我的EDIT重名了,真难搞。用了liuly的方法。
呵呵,分账啦。
先到的有奖,
辛苦的有奖,
有用的有奖,。。全都有浆啊!

请继续支持
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=202820
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部