嗨,我正在构建一个发票项目,使用TStringGrid输入数据(我使用网格来保持各个项目及其金额对齐)。由于最终报表的大小,我将每行长度限制为47个字符,之后下一行将接收onKeyUp事件。这很容易做到
procedure TForm1.ngridKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
s, s2:string;
p, l:Integer;
begin
if Length(ngrid.Cells[ngrid.col,ngrid.row]) =47 then
ngrid.Row:=ngrid.Row+1;
end;
但我不想拆分一个单词,所以我找到最后一个空格,将单元格文本修剪到该点,并将其余部分放在下一行
procedure TForm1.ngridKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
s, s2:string;
p, l:Integer;
begin
if Length(ngrid.Cells[ngrid.col,ngrid.row]) =47 then
begin
s:= ngrid.Cells[ngrid.col,ngrid.row];
l:= Length(s);
p:=LastDelimiter(' ',s);
s2:=RightStr(s,l-p);
ngrid.Cells[ngrid.col,ngrid.row]:=LeftStr(s,p);
ngrid.Row:=ngrid.Row+1;
ngrid.cells[ngrid.col,ngrid.row]:=s2;
end;
end;
这是可行的
但新单元格中的文本必须被选中,因为键入的下一个字符将清除该单元格。
如何停止选中单元格文本或将光标移到末尾?
1条答案
按热度按时间kkbh8khc1#
根据SilverWarrior的建议,我找到了一个带有多行单元格属性的字符串网格。Torry 's Delphi Pages(免费软件)提供的ZColorStringGrid v.0.3解决了我的问题,并且仍然保持了项目和金额的对齐。所以感谢你的启发。我有点失望,没有人回答我的实际问题--它在未来会很有用。