转换在线列表视图对象 - Delphi

Transforming online listview object - Delphi

我想知道如何捕获一行列表视图和转换对象。

我带了一个.xml文件,在listview里播放,加载完这个文件需要连续双击,把所有的数据线都拿进去,扔进一个LabelEdit,如图下面的代码。

procedure TForm1.LstbxDadosDblClick(Sender: TObject);
begin
if Assigned(TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex])) then
begin
  with TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex]) do
  begin
  EdtPara.Text      := Para;
  EdtDe.Text        := De;
  EdtCabecalho.Text := Cabecalho;
  EdtCorpo.Text     := Corpo;
  end;
end;
end;

  TMensagem = class
  private
    FCorpo: String;
    FCabecalho: String;
    FPara: String;
    FDe: String;
  public
    property Para : String read FPara write FPara;
    property De : String read FDe write FDe;
    property Cabecalho: String read FCabecalho write FCabecalho;
    property Corpo : String read FCorpo write FCorpo;
  end;

多种编辑对象的方法,其中当前对象可以随时更改(例如双击)。这是最简单的方法之一:在当前对象更改时保存并在最后保存。这是一个快速而肮脏的解决方案。

在实现部分添加一个成员到表单或全局 FLastMensagem: TMensagem;

可能希望在创建或初始化时初始化为 nil(留给你)。现在在 TMensagem 对象更改时保存数据

procedure TForm1.LstbxDadosDblClick(Sender: TObject);
var
  LNewMensagem: TMensagem;
begin
  LNewMensagem := TMensagem(LstbxDados.Items.Objects[LstbxDados.ItemIndex]));    
  if Assigned(LNewMensagem) then
  begin
    // When we switch, capture the dialog before updating it      
    if Assigned(FMensagem) and (LNewMensagem <> FLastMensagem) then
    begin
      FLastMensagem.Para := EdtPara.Text;
      FLastMensagem.De := EdtDe.Text;
      FLastMensagem.Cabecalho := EdtCabecalho.Text;
      FLastMensagem.Corpo := EdtCorpo.Text;
    end;

    EdtPara.Text      := LNewMensagem.Para;
    EdtDe.Text        := LNewMensagem.De;
    EdtCabecalho.Text := LNewMensagem.Cabecalho;
    EdtCorpo.Text     := LNewMensagem.Corpo;

    //Set the last dblclicked
    FLastMensagem := LNewMensagem
 end;
end;

当然需要保存最后的编辑,您可以在关闭表单时保存(不确定您的完整设计是什么)。例如

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(FLastMensagem) then
  begin
    FLastMensagem.Para := EdtPara.Text;
    FLastMensagem.De := EdtDe.Text;
    FLastMensagem.Cabecalho := EdtCabecalho.Text;
    FLastMensagem.Corpo := EdtCorpo.Text;
  end;

end;