Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
ВнизГлюк - TStrings.AddObject(TObject(-1)) Найти похожие ветки
← →
TheEd (2005-02-20 00:41) [0]Господа мастера, сабж:
Берём TStrings и делаем:AddObject(TObject(X))
для к примеру X=0,1,2,-1,-2...
Потом получаем обратно наши циферки:for i:=0 to SomeStrings.Count - 1 do begin
SomeInteger := integer(SomeStrings.Objects[i]); // так
SomeObject := integer(SomeStrings.Objects[i]); // или так
end;
для i=3 фокус не удастся (X=-1), причём дёрнется исключение типа Index out of range, однако SomeStrings.Count - 1 > 3 и для i=0,1,2,4,... это сработает! Дело видимо в том что -1 не приводится к TObject.
Как поместить в список -1???
← →
TheEd (2005-02-20 00:44) [1]Сорри, ошибка в 1 строке:
вместоSomeObject := integer(SomeStrings.Objects[i]); // или так
так:SomeObject := SomeStrings.Objects[i]; // или так
← →
default © (2005-02-20 00:58) [2]у тебя ошибка в программе
покажи реальный код
← →
TheEd (2005-02-20 03:06) [3]да я по памяти писал, а ошибки нет - попробуй напр. так поиздеваться над TListBox:
SomeListBox.AddItem("Item5", TObject(2));
SomeListBox.AddItem("Item4", TObject(1));
SomeListBox.AddItem("Item1", TObject(0));
SomeListBox.AddItem("Item2", TObject(-1));
SomeListBox.AddItem("Item3", TObject(-2));
а потом:
SomeListBox.Sort := true; // !!! будет исключение
Исключение того же рода - т.к. SomeListBox пытается получить доступ к Objects, связанным с Item2 при сортировке. У кода ListBox ошибки нет - Borland писал.
← →
default © (2005-02-20 03:53) [4]покопайся в исходниках
TListBox виноват в этом, там считается -1 за код ошибки
(я не стал лезть уж там сильно в дебри...)
если уберёшь отовсюду -1 то заработает
← →
default © (2005-02-20 04:13) [5]
constructor TCustomListBox.Create(AOwner: TComponent);
const
ListBoxStyle = [csSetCaption, csDoubleClicks];
begin
inherited Create(AOwner);
if NewStyleControls then
ControlStyle := ListBoxStyle else
ControlStyle := ListBoxStyle + [csFramed];
Width := 121;
Height := 97;
TabStop := True;
ParentColor := False;
FAutoComplete := True;
FItems := TListBoxStrings.Create; TListBoxStrings(FItems).ListBox := Self;
FCanvas := TControlCanvas.Create;
TControlCanvas(FCanvas).Control := Self;
FItemHeight := 16;
FBorderStyle := bsSingle;
FExtendedSelect := True;
FOldCount := -1;
end;
function TListBoxStrings.GetObject(Index: Integer): TObject;
begin
if ListBox.Style in [lbVirtual, lbVirtualOwnerDraw] then
Result := ListBox.DoGetDataObject(Index)
else
begin
Result := TObject(ListBox.GetItemData(Index));
if Longint(Result) = LB_ERR then Error(SListIndexError, Index); end;
end;
LB_ERR = -1;
так что вот так:)
← →
default © (2005-02-20 04:21) [6]
Result := TObject(ListBox.GetItemData(Index));
function TCustomListBox.GetItemData(Index: Integer): LongInt;
begin
Result := SendMessage(Handle, LB_GETITEMDATA, Index, 0);
end;
можешь так получать, как видишь, доступ
вообще ты информация есть дальше уже как тебе нужно делай
← →
TheEd (2005-02-21 02:15) [7]Странный ход конём :) - это я по поводу того что -1 считается ошибкой...
А за ответ спасибо. Толково и ясно - короче помогло!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.049 c