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、ポインタの基本が分かってないね。
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;
たぶんもう少し勉強しないと分からないかと思います。
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;
monaa様、ありがとうございます。
サンプルをもとに、トライしてみます。
ツイート | ![]() |