Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.012 c
2-1143327474
SEMYONov
2006-03-26 01:57
2006.04.09
Частота монитора


2-1143091143
Nsk3D
2006-03-23 08:19
2006.04.09
Filter


3-1140073857
Scorpio
2006-02-16 10:10
2006.04.09
Пароль на БД Paradox 7


2-1142870727
Asmadei
2006-03-20 19:05
2006.04.09
послать на rs232 17kb данных


15-1142588143
LordOfRock
2006-03-17 12:35
2006.04.09
Учебник по Firebird





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский