Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?
Гродненский Форум
20 Апрель 2024, 07:00:19
Новости, реклама:
   Главная   Новости Гродно Помощь Игры Календарь Войти Регистрация   Меню
Гродненский Форум > Компьютеры > Программирование
(Модераторы: Админ, barmalei) > Тема:

Delphi как много в этом слове...

Страниц  : 1 3 Далее»  Все   Вниз
  Печать  
Автор Тема: Delphi как много в этом слове...  (Прочитано 10383 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tal
Гродненец
**

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #30 : 22 Ноябрь 2005, 18:59:19 »

Если твои вычисления используют циклы - вот тут Улыбка как раз и пригодится Application.ProcessMessages, про них тут целая полемика была - зависает приложение я так понимаю как раз то, что приложение не реагирует на клики мышки и клавы - Application.ProcessMessages поможет, только воткни его в тело цикла
Записан

Дурак думает, умный действует по обстоятельствам.
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #31 : 22 Ноябрь 2005, 20:29:19 »

 смысл программы именно в том, чтобы расчитывать одни и те же вычисления с большим количеством данных. И еще маленькое уточнение: как кто считает лучше загрузить все данные в память и оперировать ими или же считывать с диска по мере необходимости? Если загрузить все данные - требуется много памяти, читать с диска - процесс затягивается...
Записан


Shura
Почетный гродненец
*****

Репутация: +416/-11
Offline Offline

Пол: Мужской
Сообщений: 2897


Просмотр профиля
« Ответ #32 : 22 Ноябрь 2005, 20:53:44 »

Цитировать
смысл программы именно в том, чтобы расчитывать одни и те же вычисления с большим количеством данных. И еще маленькое уточнение: как кто считает лучше загрузить все данные в память и оперировать ими или же считывать с диска по мере необходимости? Если загрузить все данные - требуется много памяти, читать с диска - процесс затягивается...



таки я не понял, что у тебя зависает, приложение или система?
Если "зависает" приложение, то ProcessMessages тебе поможет.
А лучше переводи все вычисления в поток. Помоему сейчас выражение "занимает много памяти" не актуально. Кстати "много" это сколько?. Если на самом деле много (больше гига :-) ищи золотую середину :-)
« Последнее редактирование: 22 Ноябрь 2005, 20:55:06 от Shura » Записан

Нетолерантный человек.
Tal
Гродненец
**

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #33 : 22 Ноябрь 2005, 20:54:04 »

2Lanser
Какого рода данные?
В каких структурах хранишь на диске и в памяти?
Хотя бы примерно объем данных?
Какого рода манипуляции/вычисления с данными?
Как часто происходят вычисления?

Ты неточно поставил задачу
Записан

Дурак думает, умный действует по обстоятельствам.
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #34 : 24 Ноябрь 2005, 13:34:45 »

 Данные хранятся в Excel - файле. Данные - текстовые и численные. Объем данных - от 2 Мb до 20 Mb. Сложно понять, что именно зависает. Иногда система даже на три клавиши не посылается...
Вычисления - очень интенсивные, В одном столбце приходится подсчитывать количество символов ("+" или "-") и анализировать построчно. Далее - разбиение по признакам, слитие данных соотв. признака в отдельный файл, подсчитывание среднего арифметического также по соотв. признаку... Вот далеко не полный список производимых вычислений...
Записан


Tal
Гродненец
**

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #35 : 24 Ноябрь 2005, 14:08:54 »

Ты изначально делаешь неправильно
Я подозреваю что ты через оле лезешь в цикле в ячейки эксцеля и уже лопатишь данные одной ячейки - ЭТО очень медленно, аш 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 Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #36 : 24 Ноябрь 2005, 14:10:32 »

Да забыл сказать, что перед
cp := TClipBoard.Create;
sl.Text := cp.AsText;
нужно средствами эксцеля выделить и скопировать диапазон ячеек с данными
Записан

Дурак думает, умный действует по обстоятельствам.
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #37 : 24 Ноябрь 2005, 14:15:23 »

 Круто! Спасибо Tal и +!
Может подскажешь "через что" можно менять надписи в диаграмме Excel. Поле "Надпись"
Записан


7floor
Автолюбитель
Губернатор
*****

Репутация: +709/-5
Offline Offline

Пол: Мужской
Сообщений: 10506


Я люблю разные вещи!

Просмотр профиля
« Ответ #38 : 24 Ноябрь 2005, 14:39:20 »

Во, Tal тебе счас насоветует, как побыструхе утечку памяти сорганизовать :-) Tal, исправь ошибку! Смеющийся
« Последнее редактирование: 24 Ноябрь 2005, 14:48:51 от 7floor » Записан

Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!"
Я на drive2.ru
Tal
Гродненец
**

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #39 : 24 Ноябрь 2005, 14:43:18 »

Улыбка Пасибо, не, никогда не загонялся таким, нужно хэлп по виз бейсику смотреть, вроде бы

Set shpDiagram = ActiveSheet.Shape(1)
Set shpDiagram = Nothing

а какое проперти черт его знает
Записан

Дурак думает, умный действует по обстоятельствам.
Tal
Гродненец
**

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #40 : 24 Ноябрь 2005, 14:44:58 »

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 Offline

Пол: Мужской
Сообщений: 105


ну и кто сказал - что будем делать?

Просмотр профиля
« Ответ #41 : 24 Ноябрь 2005, 14:51:13 »

ПРостите Улыбка был напуган...
Записан

Дурак думает, умный действует по обстоятельствам.
Shura
Почетный гродненец
*****

Репутация: +416/-11
Offline Offline

Пол: Мужской
Сообщений: 2897


Просмотр профиля
« Ответ #42 : 24 Ноябрь 2005, 19:19:01 »

таки не хорошо буфер обмена прибивать.
вожно ведь просто данные из excel перекачать в дельфи и там сними работать, не дергая ole ...

раньit так afalina работала, но потом откащались от использования буфера обмена ...

Вообще как вариант можно написать макрос в экселе, который тебе все посчитает, и выдаст результат, и диаграммы исправит. Тебе его только вызвать надо будет. Имхо самое лучше ...

« Последнее редактирование: 24 Ноябрь 2005, 19:21:11 от Shura » Записан

Нетолерантный человек.
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #43 : 24 Ноябрь 2005, 19:28:48 »

 Извиняйте, мы парни не местные, VB не знаем, поэтому пишем тем, что имеем  Смеющийся
Записан


Shura
Почетный гродненец
*****

Репутация: +416/-11
Offline Offline

Пол: Мужской
Сообщений: 2897


Просмотр профиля
« Ответ #44 : 24 Ноябрь 2005, 22:04:15 »

Цитировать
Извиняйте, мы парни не местные, VB не знаем, поэтому пишем тем, что имеем  Смеющийся


это кстати проще чем дельфи Подмигивающий
Записан

Нетолерантный человек.
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #45 : 25 Ноябрь 2005, 12:03:30 »

Цитировать

это кстати проще чем дельфи Подмигивающий


Но мы же не привыкли идти легкими путями  Подмигивающий.
Все удовольствие от программирования как раз и заключается в том, чтобы найти в клубке запутанных сущностей простейшие задачи и правильно их реализовать.
Ладно, отвлекся... Как говориться, если гора не идет к Магомету... и т.д. В своей практике никогда не приходилось детать отчет в виде текста и графиков на одной странице А4. Может кто уже делал? Подскажите путь.
Записан


iced
Гость


Email
« Ответ #46 : 25 Ноябрь 2005, 14:01:57 »

меня сейчас конечно пошлют... ;] но почему бы не использовать специально предназначенные для данной работы тулзы (ака базы данных). скорее всего данную задачу можно будет решить одним запросом.

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

PPS. как верно тут упомянули выдёргивание данных поячеечно - ОЧЕНЬ тормозной процесс - надо дёргать всё сразу - ускорит работу на 2 порядка как минимум (по крайней мере так оно было в году 98ом).

PPPS. что бы гуй не вис - пускаем обработку в отдельном треде - это стандартный и правильный путь.
Записан
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #47 : 28 Ноябрь 2005, 14:08:56 »

 To IceD: опиши пример отдельного треда.
Записан


iced
Гость


Email
« Ответ #48 : 29 Ноябрь 2005, 13:05:55 »

1. делаем тред
2. пускаем обработку в нём
Записан
Shura
Почетный гродненец
*****

Репутация: +416/-11
Offline Offline

Пол: Мужской
Сообщений: 2897


Просмотр профиля
« Ответ #49 : 29 Ноябрь 2005, 15:23:52 »

Цитировать
To IceD: опиши пример отдельного треда.


смотри TThread и delphikingdom там ооочень много примеров
Записан

Нетолерантный человек.
7floor
Автолюбитель
Губернатор
*****

Репутация: +709/-5
Offline Offline

Пол: Мужской
Сообщений: 10506


Я люблю разные вещи!

Просмотр профиля
« Ответ #50 : 30 Ноябрь 2005, 01:16:41 »

А еще вот тут посмотри:
C:\Program Files\Borland\Delphi7\Demos\Threads
... или где там у тя дельфя стоит Смеющийся
Записан

Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!"
Я на drive2.ru
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #51 : 30 Ноябрь 2005, 02:02:54 »

 Меня давно терзал вопрос: можно ли сделать панель кнопок сложной формы (типа на видеомагнитофонах управляющая)?
Записан


Shura
Почетный гродненец
*****

Репутация: +416/-11
Offline Offline

Пол: Мужской
Сообщений: 2897


Просмотр профиля
« Ответ #52 : 30 Ноябрь 2005, 13:17:55 »

Цитировать
Меня давно терзал вопрос: можно ли сделать панель кнопок сложной формы (типа на видеомагнитофонах управляющая)?


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

Найти тебе пример в интернете? Улыбка
« Последнее редактирование: 30 Ноябрь 2005, 13:20:11 от Shura » Записан

Нетолерантный человек.
Lanser
Почетный гродненец
*****

Репутация: +169/-0
Offline Offline

Пол: Мужской
Сообщений: 1334


Никогда не сдавайся! [Уехал в Островец]

Просмотр профиля Email
« Ответ #53 : 30 Ноябрь 2005, 14:49:13 »

 To Shura: Вопрос был по форме, а не по сложной кнопке управления. Было бы замечательно увидеть пример. Но как прорисовывать? В чем и какой формат изображения?
Записан


Chevich
Настоящий гродненец
****

Репутация: +13/-0
Offline Offline

Пол: Мужской
Сообщений: 385


..добрый я сегодня...

Просмотр профиля
« Ответ #54 : 30 Ноябрь 2005, 16:20:59 »

Цитировать
To Shura: Вопрос был по форме, а не по сложной кнопке управления. Было бы замечательно увидеть пример. Но как прорисовывать? В чем и какой формат изображения?

Любая кнопка это по-сути окно.
Окно может быть сделано композицией графических объектов (полигонов, кругов, квадратов, точек и т.д.)
Значит любая кнопка может выглядеть как угодно..  Целующий
Только это уже не столько Дельфи сколько голый АПИ...  Грустный
И море гемора..
И пример этого надо искать не в Дельфи, а в МСДН-е...
Записан

Все что написано выше является моим собственным мнением... :-)
Paladin
FUCK GMmmm
Губернатор
*****

Репутация: +501/-51
Offline Offline

Пол: Мужской
Сообщений: 11862


Просмотр профиля
« Ответ #55 : 30 Ноябрь 2005, 23:21:04 »

" Только это уже не столько Дельфи сколько голый АПИ..."

Та какой апи! Этож основы объектно ориентированного программирования! Улыбка)))
Записан
Chevich
Настоящий гродненец
****

Репутация: +13/-0
Offline Offline

Пол: Мужской
Сообщений: 385


..добрый я сегодня...

Просмотр профиля
« Ответ #56 : 01 Декабрь 2005, 12:03:03 »

Цитировать
Та какой апи! Этож основы объектно ориентированного программирования! Улыбка)))

ИМХО все ж голый АПИ
----------------------------------------------------
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 Offline

Пол: Мужской
Сообщений: 219


I love money and dollars

Просмотр профиля
« Ответ #57 : 04 Декабрь 2005, 04:59:16 »

Ну лана, делфисты, ответьте плиз на вопрос (когда-то давно надо было-так и не допер как, а ща просто интересно знает ли кто):
Есть два ричэдита. один рид-онли. во втором пишу текст. Нада чтоб в первом (который рид-онли) повторялось все как в первом в плане прокрутки вверх/вниз. Т.е. чтоб по вертикали они были полностью синхронизированы. (в рид-онли-нумерация строк для второго эдита)
P.S.:Я нашел туеву хучу доков на эту тему в нете. Но никто не предложил толкового решения-всегда были недостатки-либо после ввода глюк, глибо када мышой афиговенно быстро скрол подергать все сбивалось, либо еще что-то. Пока никто не смог толком ответить...
Записан

7floor
Автолюбитель
Губернатор
*****

Репутация: +709/-5
Offline Offline

Пол: Мужской
Сообщений: 10506


Я люблю разные вещи!

Просмотр профиля
« Ответ #58 : 04 Декабрь 2005, 16:28:21 »

А почему сразу дельфисты? Тебе нужны не они, а Win32 API-сты :-)
Записан

Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!"
Я на drive2.ru
Archi
Почетный гродненец
*****

Репутация: +25/-1
Offline Offline

Пол: Мужской
Сообщений: 1176


Unsilent Chburashko in the northern sky

Просмотр профиля WWW
« Ответ #59 : 04 Декабрь 2005, 17:50:05 »

Цитировать
Ну лана, делфисты, ответьте плиз на вопрос (когда-то давно надо было-так и не допер как, а ща просто интересно знает ли кто):
Есть два ричэдита. один рид-онли. во втором пишу текст. Нада чтоб в первом (который рид-онли) повторялось все как в первом в плане прокрутки вверх/вниз. Т.е. чтоб по вертикали они были полностью синхронизированы. (в рид-онли-нумерация строк для второго эдита)
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 » Записан

У меня дикая аллергия на тупость. Я сразу покрываюсь сарказмом.
Страниц  : 1 3 Далее»  Все   Вверх
  Печать  
 
Перейти в:  

Войти
Войдите, чтобы добавить комментарий

Войдите через социальную сеть

Имя пользователя:
Пароль:
Продолжительность сессии (в минутах):
Запомнить:
Забыли пароль?

Контакт
Powered by MySQL Powered by PHP Мобильная версия
Powered by SMF 1.1.20
SMF © 2006-2024, Simple Machines
Simple Audio Video Embedder
| Sitemap
Valid XHTML 1.0! Valid CSS!
Страница сгенерирована за 0,187 секунд. Запросов: 19.