delphi TStringGrid如何取消选择单元格文本或移动光标

yzckvree  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(214)

嗨,我正在构建一个发票项目,使用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;

这是可行的

但新单元格中的文本必须被选中,因为键入的下一个字符将清除该单元格。

如何停止选中单元格文本或将光标移到末尾?

kkbh8khc

kkbh8khc1#

根据SilverWarrior的建议,我找到了一个带有多行单元格属性的字符串网格。Torry 's Delphi Pages(免费软件)提供的ZColorStringGrid v.0.3解决了我的问题,并且仍然保持了项目和金额的对齐。所以感谢你的启发。我有点失望,没有人回答我的实际问题--它在未来会很有用。

相关问题