Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по компонентам для Delphi, C++ Builder 2

Автор: xy
Дата сообщения: 21.09.2006 13:00
Всем привет..
я всё по прежнему с большими датасетами %)

[никак не могу подобрать ключевые слова, чтобы поиск адекватные результаты выдал]

Хочу где-нибудь почитать или спросить совета как выводить progress bar fetchа в dataset :-?
заранее спасибо :)
Автор: Thegodofviruses
Дата сообщения: 21.09.2006 13:26
vshersh
Большое спасибо!!
Автор: RedPromo
Дата сообщения: 21.09.2006 13:42
test_testov and jicoff
Первым делом я попытался это сделать но нету там такого пакета.
BDS2006 конечно же позволяет управлять пакетами.
Поэтому я и спрашиваю есть ли у кого опыт установки этого пакета.




Автор: Sexton
Дата сообщения: 21.09.2006 13:47
borodavolga

Цитата:
посоветуйте компоненты, которые наиболее быстро отображают геометрию (сотни тысяч объектов, достаточно простых)

Не специалист, но еще есть PowerCAD, BlockEngine, HyperGraphics, FlexGraphics, SweetDrawingEngine (бесплатно), Graphics32 (бесплатно, оптимизировано для 32-битного цвета), DrawStyles...

Добавлено:
Thegodofviruses, NexusDB.

Добавлено:
xy, чтобы организовать прогрессбар нужно знать количество записей, которые будут выбраны, чтобы знать количество записей, нужно пройтись по всей выборке, а так как заранее размер выборки мы не знаем, желательно отображать прогресс бар... Замкнутый круг.
Можно ориентироваться на размер выборки "в прошлый раз", считая, что он не мог слишком измениться. Можно попробовать воспользоваться Count, если сервер мощный...
Автор: xy
Дата сообщения: 21.09.2006 13:58
Sexton
предположим, что я знаю количество записей
в конце концов знать их кол-во точно действительно не так важно

а вот как узнать состояние загрузки датасета :-?
или как подгружать датасет порциями :-?

Добавлено:
нашел в Фибах:
function FetchNext(FetchCount:Dword):integer;
похоже это имеено то, что мне надо :)
Автор: Sexton
Дата сообщения: 21.09.2006 15:13
xy, скажем так. Для решения этой экзотической задачи нормальных "профессиональных" средств нет. Ну а в качестве экзотического решения экзотической задачи, может, и FetchNext сгодится.
FIBDataSet возвращает количество отфетченных записей (общее количество записей в выборке DataSet просто не может узнать, пока fetchall не сделает). Может, читать просто количество записей в датасете в отдельном потоке?
Автор: xy
Дата сообщения: 21.09.2006 15:28
Sexton
та не, с FetchNext всё просто :)
если нам не жалко сервер (а чего его жалеть :-?) он как правило при наличии Primary Key хорошо с count справляется, я делаю следующее:


Код:
procedure OpenWithProgress(DataSet: TpFIBDataSet; ProgressBar: TProgressBar);
const FetchStep = 400;
begin
DataSet.Options := DataSet.Options - [poFetchAll];
DataSet.PrepareOptions := DataSet.PrepareOptions + [psAskRecordCount];

ProgressBar.Show;
ProgressBar.Position := 0;
ProgressBar.Repaint;

DataSet.Open;

ProgressBar.Max := DataSet.RecordCount;
while ProgressBar.Position < ProgressBar.Max do
begin
DataSet.FetchNext(FetchStep);

ProgressBar.Position := ProgressBar.Position + FetchStep;
ProgressBar.Repaint;
end;

ProgressBar.Hide;
ProgressBar.Parent.Repaint;
end;
Автор: borodavolga
Дата сообщения: 21.09.2006 15:40
relictus
Sexton
Спасибо, буду ковырять
а PowerCAD есть ломанный?
Автор: Arvur
Дата сообщения: 21.09.2006 15:41
xy
Вроде все правдоподобно..
Только я для нормальной отрисовки в цикл еще Application.ProcessMessages бы засунул.

Цитата:
вставлять реакцию на отмену

Возможно, ProcessMessages здесь тоже поможет.

З.Ы. Может FetchStep от RecordCount вычислять? Типа, чтоб бегунок аккуратней двигался
Автор: RomanTim
Дата сообщения: 21.09.2006 15:44
xy

Цитата:
как в такого рода циклы (или циклы с длительными вычислениями) вставлять реакцию на отмену (кнопку или хотябы считывание VK_ESCAPE) :-?

Более красиво, но и более аккуратно надо делать - выносить такие вещи в отдельный поток.
Если попроще, то вызывать Application.ProcessMessages - без этого прогресс бар отрисовываться все равно не будет
Автор: Samotek
Дата сообщения: 21.09.2006 15:57
Привет всем!
Подскажите, пожалуйста, какую нибудь замену TMainMenu, TPopupMenu и TMenuItem c исходниками для добавления своих фич.
Автор: Sexton
Дата сообщения: 21.09.2006 16:29
Samotek, TdxBar (DevExpress).
Автор: Arvur
Дата сообщения: 21.09.2006 17:03
Samotek
Toolbar2000
DevExpress имхо излишне монстрообразен.
Автор: xy
Дата сообщения: 21.09.2006 17:43
RomanTim
Цитата:
вызывать Application.ProcessMessages - без этого прогресс бар отрисовываться все равно не будет


вы уж меня извините, но Бар отрисовывается и так отлично :)


а за идею с
Цитата:
Application.ProcessMessages
вообще вам с Arvur спасибо

я так понимаю Application.ProcessMessages перечитывает системные сообщение, т.е. это надо хуки на них ставить (на клавиатурные) :-?
всё таки если можно примерчик с перехватом Эскейпа, ибо давно когда-то с сообщениями работал и что-то у меня плохие воспоминания :)
Автор: RomanTim
Дата сообщения: 21.09.2006 19:39
xy

Цитата:
вы уж меня извините, но Бар отрисовывается и так отлично

Странно... теоретически форма вообще отрисовываться не должна - для этого ведь надо обработать WM_PAINT, но раз работает - то и ладно


Цитата:
я так понимаю Application.ProcessMessages перечитывает системные сообщение, т.е. это надо хуки на них ставить (на клавиатурные) :-?
всё таки если можно примерчик с перехватом Эскейпа, ибо давно когда-то с сообщениями работал и что-то у меня плохие воспоминания

Имено так - разгребает все, что успело к моменту вызова набежать в очередь. А хуки - это уже через чур - хватит обчного OnKeyPressed или OnKeyDown у формы c включенным KeyPreviw
Автор: xy
Дата сообщения: 21.09.2006 19:44
RomanTim

Цитата:
Имено так - разгребает все, что успело к моменту вызова набежать в очередь. А хуки - это уже через чур - хватит обчного OnKeyPressed или OnKeyDown у формы c включенным KeyPreviw

Понятно, спасибо :)


Цитата:
Странно... теоретически форма вообще отрисовываться не должна - для этого ведь надо обработать WM_PAINT, но раз работает - то и ладно

Видимо Repaint именно для того и нужен, чтоб это обходить
Автор: RomanTim
Дата сообщения: 21.09.2006 22:44
xy

Цитата:
Видимо Repaint именно для того и нужен, чтоб это обходить

Repaint действительно принудительно переисовывает окно - видимо напрямую вызывает процедуру отрисовки.
А с прогресбаром вообще интересно - получается у него репайнт автоматом срабатывает при изменении значения. по крайней мере если написать такое
Код: for i := 1 to 100000 do
for j := 1 to 100000 do
ProgressBar1.Position := (j div i) mod 100;
Автор: xy
Дата сообщения: 21.09.2006 22:47
RomanTim
Однако стоит заметить, что если не перерисовать бар после Show, то его никто не увидит ;)
Автор: vipettut
Дата сообщения: 21.09.2006 23:35
Samotek

ToolBar2000 by Jourdan Russel
+TBX
+SpTbxlib

будет все красиво и с юникодом!
Автор: RomanTim
Дата сообщения: 22.09.2006 06:54
xy

Цитата:
Однако стоит заметить, что если не перерисовать бар после Show, то его никто не увидит

В том то и дело, что никакого переисовывания я руками не вызываю. Этот двойной цикл выполняется довольно долго, если в это время над окном с прогресом провести окном другого приложения, то вместо формы на экране будут остатки изображения другого окна, а на фоне этого мусора будет бегающая полоска - хватает просто изменения Position.

Собственно говоря, в МСДН так и написано: PBM_SETPOS Message - Sets the current position for a progress bar and redraws the bar to reflect the new position. В общем можно в очередной раз сказать себе - учи матчасть
Автор: xy
Дата сообщения: 22.09.2006 09:21
RomanTim
в двойном безсмысленном цыкле да, но в моем случае с датасетом - промежуток времени между Show и первым изменением позиции не моментален, поэтому репэинт там весьма уместен как мне кажется ;)

а кстати для открисовки окна и избежания зависания.. что можно вызывать в цикле и насколько это будет влиять на производительность :-?
может вызывать отрисовку (Application.ProcessMessages ?) каждую 1000 итераций.. как-то так :-?
Автор: Samotek
Дата сообщения: 22.09.2006 09:37
Sexton
Arvur
vipettut
Спасибо, ребята, будем пробовать.
С уважением, Samotek.
Автор: xy
Дата сообщения: 22.09.2006 11:25
Подскажите, пожалуйста, нет ли где у/для FIB+ функции, для нормальной локальной сортировки украинской локали

Ибо стандартный прием несовсем отрабатывает, остается неотсортированной буква I, хотя проблему Є оно решает :-/
Автор: RomanTim
Дата сообщения: 22.09.2006 12:12
xy

Цитата:
в двойном безсмысленном цыкле да, но в моем случае с датасетом - промежуток времени между Show и первым изменением позиции не моментален, поэтому репэинт там весьма уместен как мне кажется

Такие вещи несколько удобнее делать не в OnShow - в OnShow можно сделать
PostMessage(Handle, WM_USER, 0, 0);

а в процедуре обработки этого сообщения начинать свой запрос
procedure WMUser(var Msg: Tmessage); message WM_USER;
тогда форма отрисуется и уже потом твой долгий код выполняться будет


Цитата:
а кстати для открисовки окна и избежания зависания.. что можно вызывать в цикле и насколько это будет влиять на производительность :-?
может вызывать отрисовку (Application.ProcessMessages ?) каждую 1000 итераций.. как-то так :-?

Application.ProcessMessages и надо вызывать, а через сколько итераций - это лучше опытным путем подобрать.
Автор: vsh747
Дата сообщения: 22.09.2006 14:16

Цитата:
а кстати для открисовки окна и избежания зависания.. что можно вызывать в цикле и насколько это будет влиять на производительность :-?
А чего так не хочется использовать отдельный thread? Если уж так сложно в коде то возьми на помощь TjclThread (или как-то так) из JVCL, так много чего для design-time сделано.
Автор: Sergey913
Дата сообщения: 22.09.2006 14:23
Подскажите бесплатный компонент для работы с Mysql 5 из Delphi?
Искал по форуму, нашел только DirectMySQLObjects и ZEOS Database Objects, оба не работают с такими версиями. Еще находил mydac, но он платный и всего 60 дней работает, больше платные не пробовал.

Вобщем либо версия неподходит, либо платный. Есть что-то бесплатное?
Автор: xy
Дата сообщения: 22.09.2006 15:25
vsh747
Цитата:
А чего так не хочется использовать отдельный thread?

та просто потому, что мне это не надо :)
Автор: Sexton
Дата сообщения: 22.09.2006 19:34
Sergey913
Цитата:
Подскажите бесплатный компонент для работы с Mysql 5 из Delphi?

Ну так TMySQL5, соответственно (http://tmysql5.blogspot.com/).
Автор: Sexton
Дата сообщения: 23.09.2006 15:27
xy
Цитата:
Sexton та не, с FetchNext всё просто если нам не жалко сервер (а чего его жалеть :-?) он как правило при наличии Primary Key хорошо с count справляется, я делаю следующее:

Учитывая, что выборки будут крупные, стоит ли выполнять их на сервере по 2 раза (Count+собственно выборка), да еще и при многопользовательской работе?
В любом случае, как правильно сказано, фетч надо оформлять в отдельный поток. А Фибы, я думаю, позволят из другого потока получать количество уже отфетченных записей (psAskRecordCount надо будет, конечно, отключить).
Автор: pzaytsev
Дата сообщения: 25.09.2006 10:45
Кто может подсказать инструмент аналогичный BlazeTop SQL Monitor для работы с Firebird 2. На двойке при массивных запросах BT SQL Monitor умирает.
Devrace (которые выпускают FIBPlus, Athlant, а также BlazeTop) выпустили вместо BlazeTop новый продукт - SQLHammer - но он поддерживает только Firebird 1,5.
Какие у кого варианты?

IBExpert не предлагать - там только внутренний SQL Monitor.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: Вызов файла по относит пути и определение буквы СД-рома


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.