Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1100436588
frEEstyler
2004-11-14 15:49
2005.03.06
Как узнать длину проигрываемого фильма???


9-1102192276
Domowoi
2004-12-04 23:31
2005.03.06
Вопрос про определение Х Y


14-1108447485
Тульский
2005-02-15 09:04
2005.03.06
Свертка итогов и регистр материалов (Знатокам 1С)


1-1108642460
buka
2005-02-17 15:14
2005.03.06
DELHI и WEB


14-1108057793
Franzy
2005-02-10 20:49
2005.03.06
Постоянно трещит флоппи-дисковод





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский