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

Вниз

Проблема со скролингом в DBLookupListBox.   Найти похожие ветки 

 
Zif ©   (2004-09-18 20:12) [0]

У меня не работает скролинг в DBLookingListBox, вернее работает, но у него есть только 3 точки: Самая верхняя, Средняя, Самая нижняя. Связал с БД только через ListSource, ListField, KeyField, т.к. мне нужно ТОЛЬКО отображение списка всех полей. Может я делаю что-то не так? Или нужен для этого другой компонент?


 
sniknik ©   (2004-09-19 00:26) [1]

> Или нужен для этого другой компонент?
любой. лиш бы он знал количество данных в выборке. или курсор ставь локальный тогда данные будут выкачиватся и компанент будет знать сколько их. скролинг соотвеьственно будет плавный.
(некоторые компаненты организуюит собственный буфер, куда и выкачивают все из выюорки невзирая на курсор, тогда там есть "включатель" этого буфера)


 
Zif ©   (2004-09-19 01:21) [2]

А как осуществить это в данном примере? что именно изменить?


 
jack128 ©   (2004-09-19 01:25) [3]

Zif ©   (19.09.04 1:21) [2]
что именно изменить?

Тебе ж уже ответили

> или курсор ставь локальный тогда данные будут
> выкачиватся и компанент будет знать сколько их.
> скролинг соотвеьственно будет плавный.


 
sniknik ©   (2004-09-19 01:27) [4]

на каком примере? у тебя же ничего конкретного (как и у меня, но мне просто не от чего отталкиватся)


 
Zif ©   (2004-09-19 01:48) [5]


> или курсор ставь локальный тогда данные будут выкачиватся
> и компонент будет знать сколько их. скролинг соответственно
> будет плавный.

как это осуществить??? я новичок в этом. можно сказать примерный код или где найти про это?


 
sniknik ©   (2004-09-19 01:58) [6]

> можно сказать примерный код или где найти про это?
хелп (F1 нажать при выбранном), по тем компонентам которые используеш. если не найдеш считай нету, и меняй их.


 
Zif ©   (2004-10-05 14:50) [7]

> или курсор ставь локальный тогда...

а как его поставить? какой код нужен?


 
sniknik ©   (2004-10-05 15:08) [8]

в некоторых компонентах никак, и кода соответственно никакого не будет.


 
Zif ©   (2004-10-05 15:27) [9]

а в стандартном DBLookingListBox можно такое сделать?


 
sniknik ©   (2004-10-05 15:36) [10]

да.


 
Zif ©   (2004-10-05 15:38) [11]

как?


 
sniknik ©   (2004-10-05 15:53) [12]

легко! поставь клиентский курсор ... либо серверным fetchall делай, либо в клиентский рекордсет данные выкачивай. в общем сделай так чтобы твой DBLookingListBox знал (!) общее количество данных.

p.s. см. ветку сначала, все было сказано. (по тем данным что были предоставлены (вернее не были) это все, максимум)


 
Zif ©   (2004-10-05 16:12) [13]

а можно хоть примерный код? ...просто с учетом того, что я не знаю что такое клиентский курсор или fetchall код будет лучшим решением.
код всегда понятен и по нему удобнее изучить что и как...
только не предлогайте читать книги - пробовал - мало пользы, если не знаешь основы в этой области...
Большинство моих проблем решалось кодом в 1-5 строчек кода, а потрачено от 1 часа до 2 недель...


 
sniknik ©   (2004-10-05 16:23) [14]

> а можно хоть примерный код?
ну, если думаеш что это поможет...
ADODataSet1.CursorLocation:= clUseClient;

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


 
Zif ©   (2004-10-06 13:11) [15]

Спасибо! то, что и нужно было! как раз это и использую! последний вопрос: к чему это привязать? я сделал так:

uses ADOdb
procedure TFormMain.suiButton1Click(Sender: TObject);
begin
 DataModule1.ADODataSetMain.CursorLocation:=clUseClient;
end;

не работает...
может нужно что-то вроде этого:
procedure TFormMain.Button1Click(Sender: TObject);
begin
DBLookupListBox1.VScrollBar.ADODataSetMain.CursorLocation:=clUseClient;
end;

сразу оговорюсь: код не правильный, просто примерная схема


 
Zif ©   (2004-10-06 18:51) [16]

кто-нить!!! помогите!!! очень нужно решить этот вопрос!


 
sniknik ©   (2004-10-06 23:04) [17]

> очень нужно решить этот вопрос!
да чегото не видно, кроме призывов ничего больше.
вот правильная примерная схема
(не учел особенности компанента (не пользовался), там почемуто совсем не определяются позиции рекордсета, вместо них константы (упущение? или так и задумывалось? почемуто кажется второе верно. ну да ладно))

делаеш так
береш юнит DBCtrls.Pas копируеш себе в папку проекта, как например MyDBCtrls.Pas (название вверху модуля тоже переименовываеш на "unit MyDBCtrls;")
убираеш строку в теле модуля {$R DBCtrls.res}, найдеш, (иначе будет ругань на дубликаты в ресурсах)
в модуле весде где встречается TDBLookupListBox меняеш на TMyDBLookupListBox
после меняеш процедуру

procedure TMyDBLookupListBox.UpdateScrollBar;
var
 Pos, Max: Integer;
 ScrollInfo: TScrollInfo;
begin
 Pos := 0;
 Max := 0;
 if FRecordCount = FRowCount then
 begin
   Max := ListLink.DataSet.RecordCount; // изменение, было 4 (!)
   if not ListLink.DataSet.BOF then
     if not ListLink.DataSet.EOF then Pos := ListLink.DataSet.RecNo {было 2} else Pos := ListLink.DataSet.RecordCount {было 4};
 end;
 ScrollInfo.cbSize := SizeOf(TScrollInfo);
 ScrollInfo.fMask := SIF_POS or SIF_RANGE;
 if not GetScrollInfo(Handle, SB_VERT, ScrollInfo) or
   (ScrollInfo.nPos <> Pos) or (ScrollInfo.nMax <> Max) then
 begin
   ScrollInfo.nMin := 0;
   ScrollInfo.nMax := Max;
   ScrollInfo.nPos := Pos;
   SetScrollInfo(Handle, SB_VERT, ScrollInfo, True);
 end;
end;

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

TForm1 = class(TForm)
 DBLookupListBox1: TDBLookupListBox;
...
private
 MyDBLookupListBox1: TMyDBLookupListBox;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyDBLookupListBox1:= TMyDBLookupListBox.Create(self);
 MyDBLookupListBox1.Parent:= self;
 MyDBLookupListBox1.Left:= DBLookupListBox1.Left;
 MyDBLookupListBox1.Top:= DBLookupListBox1.Top;
 .... //перекрываеш все что считаеш нужным из того что в десигне используеш
end;

ну теперь вообще все.


 
Zif ©   (2004-10-07 00:40) [18]

Большое спасибо! буду разбираться (испытывать)



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

Форум: "Базы";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.064 c
1-1098752183
Stivi
2004-10-26 04:56
2004.11.07
Columns в TListView


3-1097067340
Term
2004-10-06 16:55
2004.11.07
ХП в MSSQL2000


1-1098777268
BaDeVlad
2004-10-26 11:54
2004.11.07
Как обрезать WMF?


14-1098090763
blackman
2004-10-18 13:12
2004.11.07
Посмотрите пожалуйста видно ли сайт.


1-1098511623
ZiziPuk
2004-10-23 10:07
2004.11.07
Как быстро загружать ОЧЕНЬ большие файлы?





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