TObjectをStringにキャストするには?

解決


angel  2008-11-07 23:20:13  No: 32512

name1,address1
name2,address2
name3,address3


からなるメールアドレス帳(address.txt)を以下のコードでComboboxに表示し、
address1をStringにキャストして取り出そうとしていますが、正しく取り出せません。
どこが原因でしょうか?

var S:string;

St:=TStringList.create;
Gt:=TStringList.create;
St.loadfromfile(address.txt);
for i:=0 to St.Count-1 do begin
  Gt.Clear;
  Gt.CommaText:=St[i];
  S:=Gt[1];
  Combobox1.items.AddObject(Gt[0],TObject(S));  
end;
Gt.free;
St.free;
Combobox1.ItemIndex:=0;
showmessage(String(Combobox1.items.Objects[Combobox1.ItemIndex]));


Objectはポインタ  2008-11-08 00:08:38  No: 32513

正しく取り出せないのは当たり前。
Object、ポインタの基本が分かってないね。


angel  2008-11-08 02:02:46  No: 32514

Objectはポインタ様ありがとうございました。
が、????
↓こういうことですか?

for i:=0 to St.Count-1 do begin
  Gt.Clear;
  Gt.CommaText:=St[i];
  Combobox1.items.addobject(Gt[0],TObject(i));
end;
Combobox1.ItemIndex:=0;
i:=Integer(Combobox1.items.Objects[Combobox1.ItemIndex]);
Gt.Clear;
Gt.CommaText:=St[i];
showmessage(Gt[1]);
Gt.free;
St.free;


monaa  2008-11-08 04:56:33  No: 32515

たぶんもう少し勉強しないと分からないかと思います。
Object,ポインタについては基本を学んだ上で経験を積んでください。
という私もまだまだ勉強中の身ですが、サンプルを書くとすればこんな感じ。
当然この方法がすべてではありません、無理やり文字列ポインタをオブジェクトと言い張って置いています。
あくまでサンプルですからね!!!

procedure TForm1.Button1Click(Sender: TObject);
var
  strList:TStringList;
  i:Integer;
  s,obs:string;
  p,p2:PString;
begin
  //詰め込み
  strList:=TStringList.Create;
  for i := 0 to 100 - 1 do
  begin
    s  :=Format('str %d',[i]);
    obs:=Format('Object %d',[i]);
    New(p);
    p^ := obs;
    strList.AddObject(s,TObject(p));
  end;
  //参照
  p2:=PString(strList.Objects[20]);
  obs := PString(p2)^;
  ShowMessage(obs);
  //破棄
  for i := 0 to 100 - 1 do
  begin
    p:=PString(strList.Objects[i]);
    Dispose(p);
  end;
  strList.Free;
  //参照
  obs := PString(p2)^;
  ShowMessage(obs);
end;


angel  2008-11-08 17:23:12  No: 32516

monaa様、ありがとうございます。
サンプルをもとに、トライしてみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加