Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Глюк - 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.053 c
3-1107529765
denis24
2005-02-04 18:09
2005.03.06
select ...blob-поля + count() ...group by


6-1104397819
MGWarlock
2004-12-30 12:10
2005.03.06
Проверка соединения


14-1108390461
Kubic
2005-02-14 17:14
2005.03.06
подскажите компанент


14-1108311197
AG.Smit
2005-02-13 19:13
2005.03.06
Как поиграть в CS:Source по модемам, типа Hyper Terminal?


6-1103985950
Змей
2004-12-25 17:45
2005.03.06
TWebBrowser