Lanser
|
 |
« : 17 Ноябрь 2005, 01:40:47 » |
|
Начинающие и не только Делфисты! Задавайте свои вопросы и Вас услышат, помогут, подскажут...
|
|
|
Записан
|
|
|
|
Lanser
|
Первый вопрос: кто знает - подскажите, как обеспечить правильную работу компонента StatusBar? Пробовал через Timer но что-то не получается. Производится обработка данных, процедура с таймером включается и работает, но процесс выполнения в соответств. компоненте не отображается. Только по окончанию процесса выдается 100%.
|
|
« Последнее редактирование: 17 Ноябрь 2005, 01:50:19 от Lanser »
|
Записан
|
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
StatusBar1.Panels[0].Text := IntToStr(iProgress); Что тут может не отображаться???
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i := 1 to 100 do begin StatusBar1.Panels[0].Text := IntToStr(i); StatusBar1.Refresh; sleep(100); end; end;
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
Вообще жаль но по-моему делфи умирает... если только борланды не продвинут таки Delphi.Net
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
А как же Delphi 8? По-моему там есть поддержка .Net, или я что-то путаю.
|
|
|
Записан
|
|
|
|
vervolf он же Бегемот
|
Есть. Только её не доделали. Я у себя поставил. Поюзал, да и перешёл на 7. Что-то мне не нравиться. Слышал вроде 2005 есть или это также 8?
|
|
|
Записан
|
we fly! You die!!!
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
Топик есть на 2 странице, по 2005 делфи
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
Подскажите как создать Alias для связи приложения с MS Excel (необходимо вытаскивать данные из разных листов), а то я что-то подзабыл.
|
|
|
Записан
|
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
Закладка Servers - компонент ExcelApplication, кидаешь на форму, и юзай интерфейс Excelя
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
Мне нужно связаться с книгой Excel-я и не с одним листом.
|
|
|
Записан
|
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
ну правильно, что типа procedure TForm1.Button1Click(Sender: TObject); var wb : _WorkBook; ws : _Worksheet; begin ExcelApplication1.Connect; try ExcelApplication1.Visible[0] := true; {wb := ExcelApplication1.Workbooks.Open('d:\test.xls', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam);} wb := ExcelApplication1.Workbooks.Add('d:\test.xls', 0); ws := wb.Worksheets.Item[1] as _Worksheet; ws.Cells.Item[1, 1] := 'blabla'; finally ExcelApplication1.Disconnect; end; end;
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
На самом деле метод Open что то трапается, нет времени смотреть, но на самом деле подключиться к Excелю очень просто, и есть куча способов, с ранним связыванием (как на примере) или поздним, выбирай какой хочешь, а в инете примеров просто вагон
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
|
Lanser
|
Спасибо за советы. А есть ли что-либо подобное для Access-a?
|
|
|
Записан
|
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
Не знаю, конечно, зачем к эксцесу обращаться через оле, если тебе нужно работать с таблицами, запросами вообщем с данными просто используй ADO, и подключайся к таблицам Access, а вообще Ole сервера есть практически в любых серьезных программах - весь офис, AutoCAD, Corel даже 1с.
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Shura
|
procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i := 1 to 100 do begin StatusBar1.Panels[0].Text := IntToStr(i); StatusBar1.Refresh; sleep(100); end; end;
Вместо всяких рефрешей и слипов делается Application.ProcessMessages(); Кидайте вы дельфи, не очень перспективное направление. Я бы не выбирал эту среду для работы.
|
|
|
Записан
|
Нетолерантный человек.
|
|
|
7floor
|
Вместо всяких рефрешей и слипов делается Application.ProcessMessages(); 1. Sleep() тут для задержки, имитирующей какую-то полезную работу. Это ведь пример. 2. Не факт, что Application.ProcessMessages() лучше в каждом конкретном случае. Он делает совсем другое - процессает мессаги, в т.ч. мессагу на отрисовку. При этом может иметь нежелательный побочный эффект - позволит юзеру нажать какую-нибудь кнопку, которую тиснуть не стОит сейчас. Refresh() же, делает только то, что делает :-) Хотя, конечно, при вдумчивом подходе, ProcessMessages() позволяет реализовать всевозможные паузы и канселы, если лень заморачиваться с многопоточностью :-) Кидайте вы дельфи, не очень перспективное направление. Я бы не выбирал эту среду для работы. Just offtopic :-)
|
|
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
Lanser
|
Появился еще один вопрос: подскажите, как запустить другое приложение из создаваемого приложения Delphi? Например нужно запустить WinRAR.
|
|
|
Записан
|
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
Самое тривиальное решение WinExec(), просто запускает приложение винды, также ShellExecute() - можно извратится с параметрами, нужный вид окна или просто открыть Explorer с нужной папкой и самое продвинутое CreateProcess - позволяет дождаться момента когда процесс отработает, и твоя прога продолжит свою работу только после окончания данного процесса. Все эти апи смотри в MS SDK хелпе, там нормально описано
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Lanser
|
Дизайнерский вопрос: изпользование шкурок, как и чем.
|
|
|
Записан
|
|
|
|
Tal
Гродненец
 Репутация: +2/-0
Offline
Пол: 
Сообщений: 105
ну и кто сказал - что будем делать?
|
Тебе нужно сделать что то типа WinAmp? Тогда вообще по%%ца придеться  Если да смотри в поисковиках "задание окна непрямоугольной формы" - факов по этой теме дофига
|
|
|
Записан
|
Дурак думает, умный действует по обстоятельствам.
|
|
|
Shura
|
1. Sleep() тут для задержки, имитирующей какую-то полезную работу. Это ведь пример. 2. Не факт, что Application.ProcessMessages() лучше в каждом конкретном случае. Он делает совсем другое - процессает мессаги, в т.ч. мессагу на отрисовку. При этом может иметь нежелательный побочный эффект - позволит юзеру нажать какую-нибудь кнопку, которую тиснуть не стОит сейчас. Refresh() же, делает только то, что делает :-) Хотя, конечно, при вдумчивом подходе, ProcessMessages() позволяет реализовать всевозможные паузы и канселы, если лень заморачиваться с многопоточностью :-)
в данном конкретном лучая как раз ProcessMessages самый лучший способ, т.к кроме статус бара еще и форма рефрешнется 
|
|
« Последнее редактирование: 21 Ноябрь 2005, 15:05:53 от Shura »
|
Записан
|
Нетолерантный человек.
|
|
|
Shura
|
Дизайнерский вопрос: изпользование шкурок, как и чем. советую http://www.delphikingdom.ru/ - там ответы на все твои вопросы касательно дельфи
|
|
|
Записан
|
Нетолерантный человек.
|
|
|
7floor
|
в данном конкретном лучая как раз ProcessMessages самый лучший способ, т.к кроме статус бара еще и форма рефрешнется  А что, просили рефрешить всю форму? :-) А про нажимания кнопок, которые не предусмотрено нажимать, я уже писал.
|
|
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
Lanser
|
Вот возникла проблемка. Приложение разработано, работает. Приходится обсчитывать динамический массив "в разных направлениях". Но возникает проблема: начинает работать, загружает систему по максимуму и вешает. Как сделать, чтобы приложение не так сильно сьедала ресурсы?
|
|
|
Записан
|
|
|
|
Shura
|
Вот возникла проблемка. Приложение разработано, работает. Приходится обсчитывать динамический массив "в разных направлениях". Но возникает проблема: начинает работать, загружает систему по максимуму и вешает. Как сделать, чтобы приложение не так сильно сьедала ресурсы? как это "вешает"? программа не может вычислениями повесить систему. вообще все большие вычисления в отделльном потоке выполняй. Можешь ему делать Suspend если хочешь что-то приостановить 
|
|
|
Записан
|
Нетолерантный человек.
|
|
|
Shura
|
А что, просили рефрешить всю форму? :-) А про нажимания кнопок, которые не предусмотрено нажимать, я уже писал. Таки нажать на кнопку после одного Application.ProcessMessages ооооочень проблематично. Однако и это можно предусмотреть ... 
|
|
|
Записан
|
Нетолерантный человек.
|
|
|
7floor
|
Таки нажать на кнопку после одного Application.ProcessMessages ооооочень проблематично. Однако и это можно предусмотреть ...  Таки нажать на кнопку ты можешь в любой момент до ProcessMessages, а она отработает в момент ProcessMessages. Это раз. А два - это то, что таких ProcessMessages будет не 1 а дофига, столько, сколько раз будет меняться статус при какой-то обработке. Так что, жми хоть обожмись :-) А про предусмотреть я сам писал, перечитай выше.
|
|
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
7floor
|
Вот возникла проблемка. Приложение разработано, работает. Приходится обсчитывать динамический массив "в разных направлениях". Но возникает проблема: начинает работать, загружает систему по максимуму и вешает. Как сделать, чтобы приложение не так сильно сьедала ресурсы? Во-первых да, если ты не выставил сам нарочно HIGH_PRIORITY или (не дай боже) REALTIME_PRIORITY своему процессу, то систему повесить никак не выйдет. А то, что прога, отрабатывая циклы (не работая по событиям, например, по таймеру, прерываниям и т.п.) съедает 100% времени ЦП - что тут удивительного? Как бы компьютеры предназначены для того, чтобы работать, а не простаивать. Вот, например, видеопроигрыватель, тут другое дело. Он должен 25 (например) раз в секунду нарисовать очередной кадр. Если процессор справляется с поставленной задачей за 1/100 секунды, мы видим, что он жрет 25% процессорного времени. Плейер не должен приступать к декодированию следующего кадра как можно скорее после декодирования предыдущего, а то на быстрых тачках не успеешь в сюжет вникнуть :-) Вот он и курит после каждого кадра. Это так, грубо, для наглядности. У твоей же проги стоит задача посчитать данные как можно быстрее, без привязки к реальному времени. И ты что, хочешь, чтобы она тем не менее, не грузила проц на полную? Так не бывает :-)
|
|
|
Записан
|
Древняя китайская мудрость гласит: "Когда нечего сказать, но очень хочется, скажи древнюю китайскую мудрость!" Я на drive2.ru
|
|
|
|