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

Вниз

ComboBox1.AddItem( item ,Pointer(-1));   Найти похожие ветки 

 
AndB ©   (2006-03-22 16:52) [0]

никогда бы не подумал... с [0..n] порходило всегда... а с < 0
procedure TForm1.FormCreate(Sender: TObject);
begin
 ComboBox1.Clear;
 ComboBox1.AddItem("item",Pointer(-1));
   ShowMessage("? = "+IntToStr(Integer(ComboBox1.Items.Objects[0])));
end;


вместо "? = -1" получаю EStringListError "List index out of bounds (0)"
а как же отрицательные использовать? %\


 
Stakan ©   (2006-03-22 17:00) [1]

SomeVar := -1;
ComboBox1.AddItem("item",Pointer(SomeVar));


 
Рамиль ©   (2006-03-22 17:01) [2]

Моя не понимать. Ты чего вместо ссылки на объект вставить пытаешься?!.


 
Рамиль ©   (2006-03-22 17:03) [3]

procedure AddItem(Item: String; AObject: TObject);

Description
Call AddItem to add a string, with an associated object, to the drop-down list.
Item is the string to add to the drop-down list.
AObject is an object associated with that string. It can be accessed using the Objects property of the TStrings object that implements the Items property.


 
AndB ©   (2006-03-22 17:05) [4]

to Рамиль
но ведь с положительными проходит?


 
Stakan ©   (2006-03-22 17:08) [5]

Виноват, нужно так
I := -1;
ComboBox1.Clear;
ComboBox1.AddItem("item",@I);
  ShowMessage("? = "+IntToStr(PInteger(ComboBox1.Items.Objects[0])^));


 
AndB ©   (2006-03-22 17:17) [6]

охохо... уже веревку искать, что-ли?
Stakan, но ведь не один итем мне добавить надо. Что ж мне, для каждого переменную рожать?
Сюжет таков: акцессная база.. долгих лет ее создателю :)
поле счетчика с новыми значениями = случайные... т.е. и отрицательные в т.ч.
пытаюсь прикрутить форму для групповых операций. В комбобоксы надо поместить справочники... для единичных записей они лукапные.. а тут "оторвать" надо... Или как?


 
Stakan ©   (2006-03-22 17:22) [7]

AndB ©   (22.03.06 17:17) [6]
Я ответил на вопрос в [0], так что претензии не принимаются.
По поводу

> Сюжет таков: акцессная база.. долгих лет ее создателю
>:)
> поле счетчика с новыми значениями = случайные... т.е.
>и отрицательные в т.ч.
> пытаюсь прикрутить форму для групповых операций. В
> комбобоксы надо поместить справочники... для единичных
> записей они лукапные.. а тут "оторвать" надо... Или
> как?

ничего не понял.


 
Leonid Troyanovsky ©   (2006-03-22 17:25) [8]


> AndB ©   (22.03.06 17:17) [6]
> охохо... уже веревку искать, что-ли?


А чего ты расстраиваешься?
Просто -1 = CB_ERR, означающий ошибку при GetItemData.
Т.е., такое число только одно.
А выходов, по-крайней мере, два:
- использовать настоящие объекты
- использовать вместо -1 какое-нибудь специальное число.

--
Regards, LVT.


 
AndB ©   (2006-03-22 17:30) [9]

to Stakan [7]
да претензии и не выдвигаются.. :) в оригинале это выглядит так:while not valTab.Eof do begin
   cb.AddItem(valTab.Fields[1].AsString, Pointer(valTab.Fields[0].AsInteger));
   valTab.Next;
end;
при чем valTab.Fields[0].AsInteger может быть < 0
а ты предлагаешь:  i := -1; ComboBox1.AddItem("item1", @i);
 i := -2; ComboBox1.AddItem("item2", @i);
 i := -3; ComboBox1.AddItem("item3", @i);
или еще лучше? )) :  a := -1; ComboBox1.AddItem("item1", @a);
 b := -2; ComboBox1.AddItem("item2", @b);
 c := -3; ComboBox1.AddItem("item3", @c);

хотя так, оно, конечно, работает


 
AndB ©   (2006-03-22 17:32) [10]

sorry, код криво


 
Leonid Troyanovsky ©   (2006-03-22 17:38) [11]


> AndB ©   (22.03.06 17:30) [9]

> а ты предлагаешь:


Не, не так.
Заводишь dynamic array в него складываешь свои имена и Longint.
В combo пользуешься индексами, причем сделать его ownerdraw,
чтобы в двух местах не хранить данные.

--
Regards, LVT.


 
AndB ©   (2006-03-22 17:44) [12]

[11] вот-вот.. массив, то, другое, пятое.. 10-е
нее.. выход, конечно, есть и другой.. сделать пустой дубликат таблицы и точно так же использовать LookupComboBox.. и не постить ее... Но как-то это.. не так ))
(* в любом случае пора домой *)


 
Leonid Troyanovsky ©   (2006-03-22 17:50) [13]


> AndB ©   (22.03.06 17:44) [12]

> [11] вот-вот.. массив, то, другое, пятое.. 10-е


Без труда не выловишь рыбку.

--
Regards, LVT.


 
Stakan ©   (2006-03-22 17:56) [14]

AndB ©   (22.03.06 17:44) [12]
Можно сделать тупо в лоб
if valTab.Fields[0].AsInteger = CB_ERR then
как у меня
else
как обычно

Потому как


> Т.е., такое число только одно.


 
Рамиль ©   (2006-03-22 18:00) [15]


> Можно сделать тупо в лоб
> if valTab.Fields[0].AsInteger = CB_ERR then
> как у меня
> else
> как обычно

А обратно? Как узнать, указатель там или просто число?


 
Stakan ©   (2006-03-22 18:07) [16]

Рамиль ©   (22.03.06 18:00) [15]
Вопрос конечно интересный :)
Опять придётся приседать. Многое зависит от конкретных условий задачи


 
Leonid Troyanovsky ©   (2006-03-22 19:47) [17]


> Stakan ©   (22.03.06 17:56) [14]

> Можно сделать тупо в лоб
> if valTab.Fields[0].AsInteger = CB_ERR then


Не, не совсем так, т.е. выберем число, которое будет
означать -1, скажем, $7FFFFFFF и будем сохранять его
вместо -1. Ну и, соо-сно, читая - преобразовывать в -1.
Понятно, что среди данных 7FFFFFFF быть не должно.

--
Regards, LVT.


 
AndB ©   (2006-03-23 08:11) [18]

to [17]
в том и дело, что число не одно.. )) а,, скажем,...  каждое любое.. Список (напр) из 10 пунктов.. из них два/пять/семь/n < 0.. Каждому "псевдоним" придумывать? Или массивы или лукапные... коли по простому (но почему?) не получается.. (сорри за up)


 
Leonid Troyanovsky ©   (2006-03-23 08:43) [19]


> AndB ©   (23.03.06 08:11) [18]

> в том и дело, что число не одно.. )) а,, скажем,...  каждое
> любое.. Список (напр) из 10 пунктов.. из них два/пять/семь/n
> < 0.. Каждому "псевдоним" придумывать? Или массивы или лукапные.
> .. коли по простому (но почему?) не получается..


Всем - не надо. В кодировании нуждается только одно число: -1.
А, вообще-то, за время взаимной переписки можно было бы
сделать не один, а несколько owner draw combobox с кучей
дополнительной функциональности или, скажем, data aware.

--
Regards, LVT.


 
Lexer ©   (2006-03-23 10:03) [20]

В свое время при переходе с D4 на D7 сталкнулся с такой же проблемой, решил так:
{Fix error for D7 - ComboBox.Item.Objects[i] = -1}
function GetComboBoxValue(Sender: TComboBox): Integer;
begin
 Result := iUnAssignedItem;
 with Sender do
  if ItemIndex <> iUnAssignedItem then
    Result := Perform(CB_GETITEMDATA, ItemIndex, 0);
end;
function GetComboBoxValueByIndex(Sender: TComboBox; ItemIndex: Integer): Integer;
begin
 Result := iUnAssignedItem;
 if ItemIndex <> iUnAssignedItem then
   Result := Sender.Perform(CB_GETITEMDATA, ItemIndex, 0);
end;

Хотя в последствии отказался от этого и спользовал вместо -1, не используемое в моих задачах число.


 
Рамиль ©   (2006-03-23 10:32) [21]

Да можно банально создать дополнительно TStringList и все. Если сортировка не нужна, будет нормально.



Страницы: 1 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.046 c
2-1143168361
kast
2006-03-24 05:46
2006.04.09
WebBrowser - проблема


2-1142956108
Progger
2006-03-21 18:48
2006.04.09
localhost = 127.0.0.1 ?


2-1141851911
spogi
2006-03-09 00:05
2006.04.09
Kak uznat kakoy den nedeli, esli znayu kakaya data?


2-1143036268
elvis79
2006-03-22 17:04
2006.04.09
как узнать номер выделеной строки в Memo?


15-1142247003
Pearled
2006-03-13 13:50
2006.04.09
Помогите найти книгу "Системное программное обеспечение"