Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag&Drop на DBLookupListBox, номер строки??? 
:(
    Опции темы
Gorets
Дата 13.7.2005, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



Как узнать на какую строку в DBLookupListBox идет перенос данных. В ListBox есть свойство ItemAtPos, а тут нету smile
PM MAIL WWW ICQ   Вверх
~FoX~
Дата 13.7.2005, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



Цитата
Specifies the number of items displayed in the drop-down list of the TDBLookupComboBox.

Delphi syntax:

property DropDownRows: Integer;



--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Gorets
Дата 13.7.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



все бы неплохо, но у DBLookupListBox нет такого свойства!
PM MAIL WWW ICQ   Вверх
Marriage
Дата 13.7.2005, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



То ли я чего не понял ...
Но это же DB, сначала нужно в базюку записать, и только потом Refresh сделать ....
Или у него есть свойство, что при переносе он сам в базюку добавляет ???
Немае вроде такого .. smile


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Akella
Дата 13.7.2005, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Gorets, тебе нужно обращатся к DataSet через DataSource и уже к значению поля, желательно уникального.
Дело в том, что все визулизирующие компоненты для БД не содержат в себе данных, они данные только рисуют.
PM MAIL   Вверх
Gorets
Дата 13.7.2005, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



да я реально никуда данные не переношу! у меня в dblookuplistbox отображаются группы товаров, а соседнем DBGrid сами товары. Я хочу сделать так, чтоб при переносе мышкой товара на определенную группу в dblookuplistbox товар переносился в эту группу, а реально просто в свойствах товара менялся номер группы, на тот который окажется под мышкой после переноса. Вот мне и надо узнать на какую строчку dblookuplistboxa я перенес товар!


Это сообщение отредактировал(а) Gorets - 13.7.2005, 13:16
PM MAIL WWW ICQ   Вверх
Akella
Дата 13.7.2005, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



посмотри SelectedItem
Добавлено @ 13:34
Код
procedure TForm1.DBLookupListBox1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin

end;
нужно вычислять итем из координат

Это сообщение отредактировал(а) Girder - 15.7.2005, 13:06
PM MAIL   Вверх
Gorets
Дата 13.7.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



Цитата(dsergey @ 13.7.2005, 13:27)
посмотри SelectedItem
Добавлено @ 13:34
Код
procedure TForm1.DBLookupListBox1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin

end;
нужно вычислять итем из координат

SelectedItem не подходит т.к. это текущая группа, а не та, на которую я переношу данные.
а вот то, что вычислять по координатам я и сам прекрасно понимаю, но вот каким образом smile smile

Это сообщение отредактировал(а) Girder - 15.7.2005, 13:06
PM MAIL WWW ICQ   Вверх
Akella
Дата 13.7.2005, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Код
var
  APoint: TPoint;
  Index: integer;
begin
  APoint.X := X;
  APoint.Y := Y;
  Index := DBListBox1.ItemAtPos(APoint, True);

//Index это есть RecNom (если нет фильтра) из набора данных

Добавлено @ 13:55
значит используй ListBox (заполняй его ручками)

Это сообщение отредактировал(а) Girder - 15.7.2005, 13:07
PM MAIL   Вверх
Akella
Дата 13.7.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



мне кажется, что в этом случае нужно WinAPI использовать, нужно посмотреть
Добавлено @ 14:22
Из справки по WinAPI

Приложению посылается это собщение для получения индекса ближайшего итема относительно точки(т.е. курсора мышки)

An application sends this message to retrieve the zero-based index of the item nearest the specified point in a list box.

LB_ITEMFROMPOINT
wParam = 0; // not used, must be zero
lParam = (LPARAM) MAKELPARAM(xPos, yPos); // coordinates of point


Parameters

xPos

Value of the low-order word of lParam. Specifies the x-coordinate of a point, relative to the upper-left corner of the client area of the list box.

yPos

Value of the high-order word of lParam. Specifies the y-coordinate of a point, relative to the upper-left corner of the client area of the list box.



Return Values

The return value contains the index of the nearest item in the low-order word. The high-order word is zero if the specified point is in the client area of the list box, or one if it is outside the client area.
PM MAIL   Вверх
Akella
Дата 13.7.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



DBLookupListBox.Perfom
PM MAIL   Вверх
Akella
Дата 13.7.2005, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



этот код работает с DBLookupListBox
Код

Var
 pc,p:TPoint;
begin
    GetCursorPos(p);
    pc:=ScreenToClient(p);
    //Label1.Caption := 'x='+IntToStr(pc.X)+' y='+IntToStr(pc.Y);
    Form1.Caption := IntToStr(ListBox1.Perform(LB_ITEMFROMPOINT, 0,MAKELPARAM(pc.X , pc.Y)))
//в Form1.Caption заносим индекс, гначиная от единицы



этот код не работает DBLookupListBox
Код

Var
 pc,p:TPoint;
begin
    GetCursorPos(p);
    pc:=ScreenToClient(p);
    //Label1.Caption := 'x='+IntToStr(pc.X)+' y='+IntToStr(pc.Y);
    Form1.Caption := IntToStr(DBLookupListBox1.Perform(LB_ITEMFROMPOINT, 0,MAKELPARAM(pc.X , pc.Y)))
//в Form1.Caption заносим индекс, гначиная от единицы

у меня на форме лежит DBLookupListBox и ListBox

Добавлено @ 14:58
этот код я вставил в таймер, причём оба коде не хотят рабоать с ListBox
Добавлено @ 15:04
так лучше
Код

Var
 pc,p:TPoint;
begin
    GetCursorPos(p);
    pc:=DBLookupListBox1.ScreenToClient(p);
    Label1.Caption := 'x='+IntToStr(pc.X)+' y='+IntToStr(pc.Y);
    Form1.Caption := IntToStr(ListBox1.Perform(LB_ITEMFROMPOINT, 0,MAKELPARAM(pc.X , pc.Y)))

теперь отсчёт итема начинается с нуля smile


но почему так не работает???
Form1.Caption := IntToStr(DBLookupListBox1.Perform(LB_ITEMFROMPOINT, 0,MAKELPARAM(pc.X , pc.Y)))


Добавлено @ 15:05
наверное, потому, что сообщение должен обраьатывать ListBox
PM MAIL   Вверх
Akella
Дата 13.7.2005, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



в этом коде проблема, в листбоксе должно быть строк столько же или больше как и в DBLookupListBox smile
PM MAIL   Вверх
Gorets
Дата 13.7.2005, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



ну так неужели нельзя решить этот вопрос? я очень надеюсь smile
PM MAIL WWW ICQ   Вверх
Akella
Дата 14.7.2005, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата(Gorets @ 13.7.2005, 10:38)
В ListBox есть свойство ItemAtPos,

Используй, значит ListBox, заполненный ручками.
PM MAIL   Вверх
Gorets
Дата 14.7.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



да все бы было неплохо, но в ListBox нет замечательного значения KeyField, а оно очень упрощает жизнь.....
PM MAIL WWW ICQ   Вверх
Marriage
Дата 14.7.2005, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



Запиши в базюку данные и запомни их новый ID. За тем в цикле пробегись по всем выбранным данным и сравнивай, то это поле или нет. По - другому , по-моему, никак ....

Это сообщение отредактировал(а) Marriage - 14.7.2005, 14:14


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
Akella
Дата 14.7.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Используй что-то такое

Код

while not Table1.eof do
  ListBox1.AddItem(Table1.FieldByName('StringField').AsString,Pointer(Table1.FieldByName('Id').AsInteger));

вот и заполнили список вместе с KeyField
Теперь как вытащить?
Да вот так:
Код

  ShowMessage( ListBox1.Items[ Integer(ListBox1.Items.Objects[12]) ]);
  Integer(ListBox1.Items.Objects[12]) - это номер строки



Положи на форму две кнопки и список добавь этот код и посмотри, что получиться
Код

procedure TForm1.Button1Click(Sender: TObject);
Var
 i:integer;
begin
  For i:=0 to 1000 do
    ListBox1.AddItem('Строка # '+IntToStr(i),Pointer(i));

end;

procedure TForm1.Button2Click(Sender: TObject);
Var
 t:integer;
begin
  i:=12;
  ShowMessage(ListBox1.Items[Integer(ListBox1.Items.Objects[i])]);
end;

end.

PM MAIL   Вверх
Gorets
Дата 15.7.2005, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



2dsergey : спасибо за помощь! прийдется наверно так и делать........
PM MAIL WWW ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.