Форум: "Базы";
Текущий архив: 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