Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
Если твои вычисления используют циклы - вот тут как раз и пригодится Application.ProcessMessages, про них тут целая полемика была - зависает приложение я так понимаю как раз то, что приложение не реагирует на клики мышки и клавы - Application.ProcessMessages поможет, только воткни его в тело цикла
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
смысл программы именно в том, чтобы расчитывать одни и те же вычисления с большим количеством данных. И еще маленькое уточнение: как кто считает лучше загрузить все данные в память и оперировать ими или же считывать с диска по мере необходимости? Если загрузить все данные - требуется много памяти, читать с диска - процесс затягивается...
|
|
|
Записан
|
|
|
|
Shura
|
смысл программы именно в том, чтобы расчитывать одни и те же вычисления с большим количеством данных. И еще маленькое уточнение: как кто считает лучше загрузить все данные в память и оперировать ими или же считывать с диска по мере необходимости? Если загрузить все данные - требуется много памяти, читать с диска - процесс затягивается... таки я не понял, что у тебя зависает, приложение или система? Если "зависает" приложение, то ProcessMessages тебе поможет. А лучше переводи все вычисления в поток. Помоему сейчас выражение "занимает много памяти" не актуально. Кстати "много" это сколько?. Если на самом деле много (больше гига :-) ищи золотую середину :-)
|
|
« Последнее редактирование: 22 Ноябрь 2005, 20:55:06 от Shura »
|
Записан
|
Нетолерантный человек.
|
|
|
Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
2Lanser Какого рода данные? В каких структурах хранишь на диске и в памяти? Хотя бы примерно объем данных? Какого рода манипуляции/вычисления с данными? Как часто происходят вычисления?
Ты неточно поставил задачу
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
Данные хранятся в Excel - файле. Данные - текстовые и численные. Объем данных - от 2 Мb до 20 Mb. Сложно понять, что именно зависает. Иногда система даже на три клавиши не посылается... Вычисления - очень интенсивные, В одном столбце приходится подсчитывать количество символов ("+" или "-") и анализировать построчно. Далее - разбиение по признакам, слитие данных соотв. признака в отдельный файл, подсчитывание среднего арифметического также по соотв. признаку... Вот далеко не полный список производимых вычислений...
|
|
|
Записан
|
|
|
|
Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
Ты изначально делаешь неправильно Я подозреваю что ты через оле лезешь в цикле в ячейки эксцеля и уже лопатишь данные одной ячейки - ЭТО очень медленно, аш 3,14здец, неудивительно что система тормозит. Я бы делал так : копировал бы в буфер диапазон данных эксцеля, причем блоками строк по 1000, потому что кинуть в буфер сразу 20мб текста тоже еб%%во. Далее : procedure TForm1.BitBtn1Click(Sender: TObject); var sl : TStringList; cp : TClipBoard; begin cp := TClipBoard.Create; sl := TStringList.Create; try cp := TClipBoard.Create; sl.Text := cp.AsText; ShowMessage('Rec count : ' + IntToStr(sl.Count) + ' Text : ' + chr(10) + sl.Text); cp.Clear; finally cp.Free; sl.Free; end; end; все поля в строке отделены табами, а строки переносом строки, распарсить, можно пихнуть в структуру и потом анализируй себе это будет на порядок быстрее и система не зависнет, причем 20 - 30 мег - это не факт
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
Да забыл сказать, что перед cp := TClipBoard.Create; sl.Text := cp.AsText; нужно средствами эксцеля выделить и скопировать диапазон ячеек с данными
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
Круто! Спасибо Tal и +! Может подскажешь "через что" можно менять надписи в диаграмме Excel. Поле "Надпись"
|
|
|
Записан
|
|
|
|
7floor
|
Во, Tal тебе счас насоветует, как побыструхе утечку памяти сорганизовать :-) Tal, исправь ошибку!
|
|
« Последнее редактирование: 24 Ноябрь 2005, 14:48:51 от 7floor »
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
Пасибо, не, никогда не загонялся таким, нужно хэлп по виз бейсику смотреть, вроде бы Set shpDiagram = ActiveSheet.Shape(1) Set shpDiagram = Nothing а какое проперти черт его знает
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
procedure TForm1.BitBtn1Click(Sender: TObject); var sl : TStringList; cp : TClipBoard; begin cp := TClipBoard.Create; sl := TStringList.Create; try //cp := TClipBoard.Create; sl.Text := cp.AsText; ShowMessage('Rec count : ' + IntToStr(sl.Count) + ' Text : ' + chr(10) + sl.Text); cp.Clear; finally cp.Free; sl.Free; end; end;
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Tal
Гродненец
Репутация: +2/-0
Offline
Пол:
Сообщений: 105
ну и кто сказал - что будем делать?
|
ПРостите был напуган...
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Shura
|
таки не хорошо буфер обмена прибивать. вожно ведь просто данные из excel перекачать в дельфи и там сними работать, не дергая ole ...
раньit так afalina работала, но потом откащались от использования буфера обмена ...
Вообще как вариант можно написать макрос в экселе, который тебе все посчитает, и выдаст результат, и диаграммы исправит. Тебе его только вызвать надо будет. Имхо самое лучше ...
|
|
« Последнее редактирование: 24 Ноябрь 2005, 19:21:11 от Shura »
|
Записан
|
Нетолерантный человек.
|
|
|
Lanser
|
Извиняйте, мы парни не местные, VB не знаем, поэтому пишем тем, что имеем
|
|
|
Записан
|
|
|
|
Shura
|
Извиняйте, мы парни не местные, VB не знаем, поэтому пишем тем, что имеем это кстати проще чем дельфи
|
|
|
Записан
|
Нетолерантный человек.
|
|
|
Lanser
|
это кстати проще чем дельфи Но мы же не привыкли идти легкими путями . Все удовольствие от программирования как раз и заключается в том, чтобы найти в клубке запутанных сущностей простейшие задачи и правильно их реализовать. Ладно, отвлекся... Как говориться, если гора не идет к Магомету... и т.д. В своей практике никогда не приходилось детать отчет в виде текста и графиков на одной странице А4. Может кто уже делал? Подскажите путь.
|
|
|
Записан
|
|
|
|
iced
Гость
|
меня сейчас конечно пошлют... ;] но почему бы не использовать специально предназначенные для данной работы тулзы (ака базы данных). скорее всего данную задачу можно будет решить одним запросом.
PS. ну и в случае необходимости работать с экселем (с трудом предоставляю себе такую ситуацию) я бы написал небольшой макрос который бы экспортнул данные в цсв и работал бы уже с ним (макрос мона дёргать уже из дельфей при каждом запуске).
PPS. как верно тут упомянули выдёргивание данных поячеечно - ОЧЕНЬ тормозной процесс - надо дёргать всё сразу - ускорит работу на 2 порядка как минимум (по крайней мере так оно было в году 98ом).
PPPS. что бы гуй не вис - пускаем обработку в отдельном треде - это стандартный и правильный путь.
|
|
|
Записан
|
|
|
|
Lanser
|
To IceD: опиши пример отдельного треда.
|
|
|
Записан
|
|
|
|
iced
Гость
|
1. делаем тред 2. пускаем обработку в нём
|
|
|
Записан
|
|
|
|
Shura
|
To IceD: опиши пример отдельного треда. смотри TThread и delphikingdom там ооочень много примеров
|
|
|
Записан
|
Нетолерантный человек.
|
|
|
7floor
|
А еще вот тут посмотри: C:\Program Files\Borland\Delphi7\Demos\Threads ... или где там у тя дельфя стоит
|
|
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
Lanser
|
Меня давно терзал вопрос: можно ли сделать панель кнопок сложной формы (типа на видеомагнитофонах управляющая)?
|
|
|
Записан
|
|
|
|
Shura
|
Меня давно терзал вопрос: можно ли сделать панель кнопок сложной формы (типа на видеомагнитофонах управляющая)? ты это уже спрашивал. Можно, используя винапи нужно описывать регионы формы для прорисовки. Если же тебе нужны контролы сложной формы, то тебе надо прорисовывать их вручную. Найти тебе пример в интернете?
|
|
« Последнее редактирование: 30 Ноябрь 2005, 13:20:11 от Shura »
|
Записан
|
Нетолерантный человек.
|
|
|
Lanser
|
To Shura: Вопрос был по форме, а не по сложной кнопке управления. Было бы замечательно увидеть пример. Но как прорисовывать? В чем и какой формат изображения?
|
|
|
Записан
|
|
|
|
Chevich
|
To Shura: Вопрос был по форме, а не по сложной кнопке управления. Было бы замечательно увидеть пример. Но как прорисовывать? В чем и какой формат изображения? Любая кнопка это по-сути окно. Окно может быть сделано композицией графических объектов (полигонов, кругов, квадратов, точек и т.д.) Значит любая кнопка может выглядеть как угодно.. Только это уже не столько Дельфи сколько голый АПИ... И море гемора.. И пример этого надо искать не в Дельфи, а в МСДН-е...
|
|
|
Записан
|
Все что написано выше является моим собственным мнением... :-)
|
|
|
Paladin
|
" Только это уже не столько Дельфи сколько голый АПИ..." Та какой апи! Этож основы объектно ориентированного программирования! )))
|
|
|
Записан
|
|
|
|
Chevich
|
Та какой апи! Этож основы объектно ориентированного программирования! ))) ИМХО все ж голый АПИ ---------------------------------------------------- Constructor TSplashForm.Create(AOwner:TComponent); Const B=8; D=100+B; Var R1,R2:HRgn; Begin // Создаем форму и 2 временных эллипсных региона Inherited Create(AOwner); R1:=CreateEllipticRgn(B,B,Width-B,Height-B); R2:=CreateEllipticRgn(D,D,Width-D,Height-D); // Создаем результирующий регион, как разность первых двух FRgn:=CreateEllipticRgn(B,B,Width-B,Height-B); CombineRgn(FRgn,R1,R2,RGN_DIFF); // Устанавливаем регион окна и освобождаем временные ресурсы SetWindowRgn(Handle,FRgn,False); DeleteObject(R2); DeleteObject(R1) End { TSplashForm.Create }; -------
|
|
|
Записан
|
Все что написано выше является моим собственным мнением... :-)
|
|
|
H.A.M.
Гродненец
Репутация: +7/-0
Offline
Пол:
Сообщений: 219
I love money and dollars
|
Ну лана, делфисты, ответьте плиз на вопрос (когда-то давно надо было-так и не допер как, а ща просто интересно знает ли кто): Есть два ричэдита. один рид-онли. во втором пишу текст. Нада чтоб в первом (который рид-онли) повторялось все как в первом в плане прокрутки вверх/вниз. Т.е. чтоб по вертикали они были полностью синхронизированы. (в рид-онли-нумерация строк для второго эдита) P.S.:Я нашел туеву хучу доков на эту тему в нете. Но никто не предложил толкового решения-всегда были недостатки-либо после ввода глюк, глибо када мышой афиговенно быстро скрол подергать все сбивалось, либо еще что-то. Пока никто не смог толком ответить...
|
|
|
Записан
|
|
|
|
7floor
|
А почему сразу дельфисты? Тебе нужны не они, а Win32 API-сты :-)
|
|
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
Archi
|
Ну лана, делфисты, ответьте плиз на вопрос (когда-то давно надо было-так и не допер как, а ща просто интересно знает ли кто): Есть два ричэдита. один рид-онли. во втором пишу текст. Нада чтоб в первом (который рид-онли) повторялось все как в первом в плане прокрутки вверх/вниз. Т.е. чтоб по вертикали они были полностью синхронизированы. (в рид-онли-нумерация строк для второго эдита) P.S.:Я нашел туеву хучу доков на эту тему в нете. Но никто не предложил толкового решения-всегда были недостатки-либо после ввода глюк, глибо када мышой афиговенно быстро скрол подергать все сбивалось, либо еще что-то. Пока никто не смог толком ответить... 1) Пользовать GetScrollInfo(...), SetScrollInfo(...), GetScrollPos(...) и SetScrollPos(...). 2) Ловить WM_VSCROLL и ему сопутствующие: SB_LINEUP SB_LINEDOWN SB_PAGEUP SB_PAGEDOWN SB_THUMBPOSITION SB_ENDSCROLL SBM_GETPOS SBM_SETPOS И иллюстрация. P.S. RTFMSDN!!!
|
|
« Последнее редактирование: 04 Декабрь 2005, 17:57:38 от Archi »
|
Записан
|
У меня дикая аллергия на тупость. Я сразу покрываюсь сарказмом.
|
|
|
|