Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
ВнизТраблы с StringList Найти похожие ветки
← →
Nameziz (2008-11-24 12:19) [0]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
resourcestring
default_Item = "Не выбрано";
type
Tform_Test = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
form_Test: Tform_Test;
implementation
{$R *.dfm}
procedure Tform_Test.FormCreate(Sender: TObject);
var
L: TStrings;
s: string;
procedure Load;
begin
//
L.InsertObject(0, "TestItem", TObject(default_Item));
//
end;
begin
L := TStringList.Create;
try
Load;
ShowMessage(string(L.Objects[0]));
finally
L.Free;
end;
end;
end.
Почему L.Objects[0] возвращает не default_Item, а почему-то "Project1".
← →
Palladin © (2008-11-24 12:24) [1]
> L.InsertObject(0, "TestItem", TObject(default_Item));
1. и сколько ты после этого еще вставил в первую позицию элементов?
2. за такое вольное обращение с идентификатором типа String - эцих с гвоздями, пока не поймешь, что такое String
← →
DevilDevil (2008-11-24 12:30) [2]попробуй:
ShowMessage(pchar(L.Objects[0]));
← →
Loginov Dmitry © (2008-11-24 20:04) [3]> L.InsertObject(0, "TestItem", TObject(default_Item));
Со строками так лучше не извращаться. Есть такая альтернатива:
L.Values["TestItem"] := default_Item;
← →
NieL © (2008-11-25 12:06) [4]Попробуй так:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
resourcestring
default_Item = "Не выбрано";
type
Tform_Test = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TItemAsObject = record
FieldName: string;
end;
var
form_Test: Tform_Test;
implementation
{$R *.dfm}
procedure Ins(var L: TStringList; s, _FieldName: string);
function _Ins: TObject;
begin
TItemAsObject(Result).FieldName := _FieldName;
end;
begin
L.InsertObject(0, s, _Ins);
end;
procedure Tform_Test.FormCreate(Sender: TObject);
var
default_List: TStringList;
begin
default_List := TStringList.Create;
try
Ins(
default_List, "TestItem", default_Item);
ShowMessage(string(default_List.Objects[0]));
finally
default_List.Free;
end;
end;
end.
← →
Palladin © (2008-11-25 12:09) [5]
> NieL © (25.11.08 12:06) [4]
читать до полного просветления
http://delphimaster.net/view/2-1225802468/
← →
NieL © (2008-11-25 12:35) [6]
> Palladin © (25.11.08 12:09) [5]
> > NieL © (25.11.08 12:06) [4]читать до полного просветленияhttp:
> //delphimaster.net/view/2-1225802468/
Не вижу смысла в выделении памяти под запись, ведь автору, судя по вопросу, в объекте StringList"а нужно хранить одно строковое значение и ничего более, одно строковое поле в recorde ведь равно 4 байта, что соответствует допустимому размеру TObject, сохраняем и не паримся.
← →
Palladin © (2008-11-25 12:39) [7]
> дно строковое поле в recorde ведь равно 4 байта
строка - это не просто указатель, это указатель на структуру время жизни которой управляется rtl. доступ с приведением типов туда сюда может в какой то неожиданный для программиста момент лишить ее жизни. работать в таком режиме нужно с PChar, а не с String
← →
clickmaker © (2008-11-25 12:43) [8]> одно строковое поле в recorde ведь равно 4 байта
да ну?
← →
Cobalt © (2008-11-25 14:59) [9]
> clickmaker © (25.11.08 12:43) [8]
type
rec1 = record
field1: Cardinal;
field2: byte;
end;
rec2 = record
field1: Cardinal;
field2: byte;
field3: string;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(IntToStr(SizeOf(rec1))+" - "+IntToStr(SizeOf(rec2)));
end;
"Движенья нет, сказал мудрец брадатый..."
← →
clickmaker © (2008-11-25 15:03) [10]> [9] Cobalt © (25.11.08 14:59)
да понятно, что указатель на стринг - 4 байта.
А если мы начнем присваивать этому полю локальные переменные, попутно добавляя в список?
← →
Palladin © (2008-11-25 15:48) [11]
> NieL © (25.11.08 12:35) [6]
а вот так лучше смысл видишь?Var
i:Integer;
l:TStringList;
begin
l:=TStringList.Create;
For i:=0 to 1000 Do
Ins(l,IntToStr(999-i),IntToStr(i));
For i:=0 to l.Count-1 Do
Memo1.Lines.Add(l[i]+#9+string(l.Objects[0]));
l.Free;
end;
за одно может просветишь, с чего вдруг AV выскакивает при l.Free и зачемvar
в объявленииprocedure Ins(var L: TStringList; s, _FieldName: string);
? :)
саветчики млин )
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c