А Я тоже подцепил такой триперрок (
» Вопросы по Delphi (до версии 2009) - часть 5
Скажите как средствами delphi запустить vba макрос excel с параметром (передать в качестве параметра число)
SIgor33
uses ComObj, ActiveX, OleServer;
var
ExcelApp,Workbook:Variant;
begin
ExcelApp := CreateOleObject('Excel.Application');
Workbook := ExcelApp.WorkBooks.Add('C:\1.xls');
ExcelApp.Run('Macros1', параметры); // собственно ответ
ExcelApp.Quit;
end;
uses ComObj, ActiveX, OleServer;
var
ExcelApp,Workbook:Variant;
begin
ExcelApp := CreateOleObject('Excel.Application');
Workbook := ExcelApp.WorkBooks.Add('C:\1.xls');
ExcelApp.Run('Macros1', параметры); // собственно ответ
ExcelApp.Quit;
end;
greenpc
Спасибо за совет
Спасибо за совет
подскажите плз...как сделать грид по типу 1С?
http://pic.ipicture.ru/uploads/091006/y7xSYbK51g.jpg
тоесть меня интерисуеет 2 строки в 1 ячейке...не мультистрочность а именно 2 разных поля
http://pic.ipicture.ru/uploads/091006/y7xSYbK51g.jpg
тоесть меня интерисуеет 2 строки в 1 ячейке...не мультистрочность а именно 2 разных поля
mdid
TcxGrid может от DevExpress.
TcxGrid может от DevExpress.
пасиб..ща поищу
Привет всем.
У меня такой вопрос по Delphi. Я взялся за проект "Виртуальный музей". То есть 3D версия музея. Если кто , что знает по такой теме пожалуйся напишите мне ! ( Я с 3D на Delphi до это того не занимался) Мне важна любая информация. Помогите кто чем может. Может у кого есть литература ссылки исходники и т.д. А по ходу дела я буду задавать вопросы ( если Вы конечно не против).
У меня такой вопрос по Delphi. Я взялся за проект "Виртуальный музей". То есть 3D версия музея. Если кто , что знает по такой теме пожалуйся напишите мне ! ( Я с 3D на Delphi до это того не занимался) Мне важна любая информация. Помогите кто чем может. Может у кого есть литература ссылки исходники и т.д. А по ходу дела я буду задавать вопросы ( если Вы конечно не против).
Цитата:
литература ссылки исходники
Погугли "delphi opengll" и "delphi directx"
А вообще для создания подобных 3D-проектов есть специализированный софт, даже бесплатный. Ручками же создавать подобное в Delphi - ой, ё... imho
Есть написаный клас для поиска файлов на диске. Нужно приделать к нему ползунок для отображения продвижения (0% .. 100%)
Вопрос: как вычислять прогрес? Допустим если у меня было бы изначально количество всех файлов на диске (в каталоге) - не вопрос... но у меня изначально такой инфы нет, а делать специально для этого проход перед началом непосредственно поиска нежелательно - лишнее время.
Вопрос: как вычислять прогрес? Допустим если у меня было бы изначально количество всех файлов на диске (в каталоге) - не вопрос... но у меня изначально такой инфы нет, а делать специально для этого проход перед началом непосредственно поиска нежелательно - лишнее время.
VandB
Начни отсюда для DirectX
http://www.micrel.cz/Dx/
или отсюда для OpenGL
http://glscene.sourceforge.net/wikka/HomePage
для визуализации оба подойдут хорошо, но создавать лучше в 3dMax...
Начни отсюда для DirectX
http://www.micrel.cz/Dx/
или отсюда для OpenGL
http://glscene.sourceforge.net/wikka/HomePage
для визуализации оба подойдут хорошо, но создавать лучше в 3dMax...
Цитата:
Вопрос: как вычислять прогрес?
Тогда никак. Нужен ли он вообще? Иногда достаточно просто анимации (например, Marquee Style или "лупа, бегающая по листу бумаги")
Цитата:
но у меня изначально такой инфы нет
Если анимация не устраивает - надо получать инфу. Когда-то видел пример на Delphi довольно быстрого получения количества файлов (проход по всем поддиректориям)...
Цитата:
а делать специально для этого проход перед началом непосредственно поиска нежелательно - лишнее время.
Без проблем - выполняем эту операции параллельно с поиском, в отдельном потоке Чем продолжительнее поиск, тем точнее будет индикация, ну а для непродолжительного так как раз точность индикации не имеет особого значения.
То есть сделать примерно так, как выполнен прогрессбар в адресной строке окна поиска в Windows Vista/7, по которому можно судить о примерном окончании процесса. Правда там за точностью не гнались, похоже обошлись-таки больше анимацией, чем данными о кол-ве файлов (это кол-во, imho, "выдёргивается" из индекса Windows) - прогресс двигается медленно-медленно, зато потом рванёт от 25% к 100 при завершении поиска
JohnSilver182
Цитата:
Кстати вот один человек хороший с CrackL@b.ru написал свою антивирусник, специально заточеный под Индюк'a
Anti.Win32.Induc.v.0.13 (256.76 KB)
ссылка на тему
Цитата:
А Я тоже подцепил такой триперрок
Кстати вот один человек хороший с CrackL@b.ru написал свою антивирусник, специально заточеный под Индюк'a
Anti.Win32.Induc.v.0.13 (256.76 KB)
ссылка на тему
Скажите как узнать средствами Delphi является ли данная ячейка на листе excel защищенной от редактирования
mdid
Я использовал DevExpres QuantumGrid - он такое может
Я использовал DevExpres QuantumGrid - он такое может
Здраствуйте! У меня такой вопрос к тем кто создавал базы даних с помощю ClienDataSet.
Создал базу с ситемой подкатегорий, для регистрации даных в больнице, но вот мешает одна функцыя добавления даних в DBGrid (когда в конце базы нажимаем кнопку вниз и добавляется новое поле). Каким образом можно отключить возможность добавления даних клавишей вниз (но не изменяя права доступа, ибо нужно додавать програмно, просто отключить добавление с кнопки вниз)
ps. У меня очень плохо с руским, сам не руский )))
Создал базу с ситемой подкатегорий, для регистрации даных в больнице, но вот мешает одна функцыя добавления даних в DBGrid (когда в конце базы нажимаем кнопку вниз и добавляется новое поле). Каким образом можно отключить возможность добавления даних клавишей вниз (но не изменяя права доступа, ибо нужно додавать програмно, просто отключить добавление с кнопки вниз)
ps. У меня очень плохо с руским, сам не руский )))
Здравствуйте. Такое дело. Значит запускаю функцию в отдельном потоке. Там значит останавливаю и запускаю службу. Дело это не быстрое. Обычно в код добавлял Sleep, но это чисто так для вида притормаживать выполнение в циклах и тд что вот мол программа старается трудится и спешить в общем-то некуда. А тут пока служба остановится, дальше в потоке идет код запуска ее и получается он тупо мимо проходит и пользователь остается с остановленной службой. Может есть какой-нибудь способ синхронизации в самом потоке мол пока не выпоним в нем что-то то дальше код не будем выполнять?
andrewtishkin
Все возможно ) а главное надо руками В принципе задача не очень тяжелая , я по разобрался А например ( софт для этого бесплатный))
V1s1ter
большое спасибо
==============================================================================================
Вот у меня назрел вопросик:
Мне нужен компонент для открытия и просмотра 3ds max файлов. То есть тип такого :
PS это я на Фотошопе нарисовал для визуализации
Что бы поддерживалась анимация, увиличенине, вращение и тд.
Все возможно ) а главное надо руками В принципе задача не очень тяжелая , я по разобрался А например ( софт для этого бесплатный))
V1s1ter
большое спасибо
==============================================================================================
Вот у меня назрел вопросик:
Мне нужен компонент для открытия и просмотра 3ds max файлов. То есть тип такого :
PS это я на Фотошопе нарисовал для визуализации
Что бы поддерживалась анимация, увиличенине, вращение и тд.
Maks150988
Я таки понял, что манипулируешь ты не самим написанной службой, а просто какой-то службой в системе? И алгоритм такой: даешь команду остановить службу, делаешь определенный Sleep, надеясь, что этого хватит для останова службы, после чего не глядя на действительное состояние службы пытаешься ее запустить. И проблема в том что отведенного Sleep'ом времени не хватает. И реально выполняется попытка запустить еще не остановленную службу. Так?
Скорее всего - да. В этом случае надо использовать Service API , в частности там есть функция EnumServicesStatus(), которая позволяет перечислить службы в системе, узнать их имена и текущее состояние. Или ControlService() с параметром SERVICE_CONTROL_INTERROGATE (позволяет узнать о состоянии службы в данный момент). Т.е. останавливаешь службу (опять же лучше всего средствами Service API), ждешь, пока она действительно не остановится, контроллируя ее статус и только потом снова ее запускаешь. Вот мегаполезная статья по этому поводу (с примерами на Дельфи):
http://bugtraq.ru/forum/faq/programming/services.html
Я таки понял, что манипулируешь ты не самим написанной службой, а просто какой-то службой в системе? И алгоритм такой: даешь команду остановить службу, делаешь определенный Sleep, надеясь, что этого хватит для останова службы, после чего не глядя на действительное состояние службы пытаешься ее запустить. И проблема в том что отведенного Sleep'ом времени не хватает. И реально выполняется попытка запустить еще не остановленную службу. Так?
Скорее всего - да. В этом случае надо использовать Service API , в частности там есть функция EnumServicesStatus(), которая позволяет перечислить службы в системе, узнать их имена и текущее состояние. Или ControlService() с параметром SERVICE_CONTROL_INTERROGATE (позволяет узнать о состоянии службы в данный момент). Т.е. останавливаешь службу (опять же лучше всего средствами Service API), ждешь, пока она действительно не остановится, контроллируя ее статус и только потом снова ее запускаешь. Вот мегаполезная статья по этому поводу (с примерами на Дельфи):
http://bugtraq.ru/forum/faq/programming/services.html
VandB
Цитата:
Если бы "по разбирался" такого вопроса
Цитата:
не возникло бы. Таже GLScene эти файлы читает и даже готовая демка есть...
Цитата:
я по разобрался
Если бы "по разбирался" такого вопроса
Цитата:
Мне нужен компонент для открытия и просмотра 3ds max файлов
не возникло бы. Таже GLScene эти файлы читает и даже готовая демка есть...
V1s1ter
glscene Delphi 2009 не поддерживается...... есть альтернатива или сам glscene для Delphi 2009?
glscene Delphi 2009 не поддерживается...... есть альтернатива или сам glscene для Delphi 2009?
VandB
Цитата:
Странно я об этом не знал, но файлы dpk для D2009 и D2010 видел.
Если серьезно, то я немогу гарантировать правильность сборки под 2009 или 2010 ибо пользую 2007. Но если у Вас проблемы с получением кода через механизм CVS (Concurrent Versions System), то могу выложить последнее обновление.
Цитата:
glscene Delphi 2009 не поддерживается...
Странно я об этом не знал, но файлы dpk для D2009 и D2010 видел.
Если серьезно, то я немогу гарантировать правильность сборки под 2009 или 2010 ибо пользую 2007. Но если у Вас проблемы с получением кода через механизм CVS (Concurrent Versions System), то могу выложить последнее обновление.
psa1974
Да, именно так. Требуется перезапускать DHCP клиент. Sleep, конечно можно, но есть такой вопрос. Вот если из командной строки останавливать эту службу под вистой/семеркой, там предлагают остановить еще и WinHTTP службу. С этим проблем не будет? Просто раньше я через WinExec выполнял "net stop" для службы и все стопорилось на этих системах, потому как скрывал окошко интерпретатора и пользователь не видел что там оказывается вручную надо подтвердить еще перезапуск. Да и Sleep большой неохото делать, просто код выполнять не в отдельном потоке, он последовательно сам выполнится и все когда надо, а тут кот в мешке.
Сейчас да, останавливаю через Service API, но я честно не знаю как в самом потоке зацикливать выполнение задачи что-то наподобие repeat untill или чего там надо для него. Что-нибудь типа repeat нужно где проверять состояние службы и если она не готова, делать Sleep ну или как-то так.
Да, именно так. Требуется перезапускать DHCP клиент. Sleep, конечно можно, но есть такой вопрос. Вот если из командной строки останавливать эту службу под вистой/семеркой, там предлагают остановить еще и WinHTTP службу. С этим проблем не будет? Просто раньше я через WinExec выполнял "net stop" для службы и все стопорилось на этих системах, потому как скрывал окошко интерпретатора и пользователь не видел что там оказывается вручную надо подтвердить еще перезапуск. Да и Sleep большой неохото делать, просто код выполнять не в отдельном потоке, он последовательно сам выполнится и все когда надо, а тут кот в мешке.
Сейчас да, останавливаю через Service API, но я честно не знаю как в самом потоке зацикливать выполнение задачи что-то наподобие repeat untill или чего там надо для него. Что-нибудь типа repeat нужно где проверять состояние службы и если она не готова, делать Sleep ну или как-то так.
VandB
Вот последняя GLScene с поддержкой D4-D2010
http://rapidshare.com/files/290131228/SC2.rar.html
Вот последняя GLScene с поддержкой D4-D2010
http://rapidshare.com/files/290131228/SC2.rar.html
Maks150988
Цитата:
я обычно делаю так если измение значения Terminated идет со стороны (например из потока)
while not(Terminated) do begin
...
Application.processmessage;
end;
и в догонку
проверка на состояние службы телнет
Код: var ssStatus: SERVICE_STATUS;
schSCManager: SC_HANDLE;
schService: SC_HANDLE;
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if schSCManager=0 then RaiseLastOSError;
schService:=OpenService(schSCManager,'tlntsvr'#0,SERVICE_ALL_ACCESS);
if schService=0 then RaiseLastOSError;
if(QueryServiceStatus(schService,ssStatus)) then begin
case ssStatus.dwCurrentState of
SERVICE_STOPPED: Label1.Caption := 'Остановлен';
SERVICE_RUNNING: Label1.Caption := 'Запущен';
end;
end;
Цитата:
зацикливать выполнение задачи
я обычно делаю так если измение значения Terminated идет со стороны (например из потока)
while not(Terminated) do begin
...
Application.processmessage;
end;
и в догонку
проверка на состояние службы телнет
Код: var ssStatus: SERVICE_STATUS;
schSCManager: SC_HANDLE;
schService: SC_HANDLE;
begin
schSCManager:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if schSCManager=0 then RaiseLastOSError;
schService:=OpenService(schSCManager,'tlntsvr'#0,SERVICE_ALL_ACCESS);
if schService=0 then RaiseLastOSError;
if(QueryServiceStatus(schService,ssStatus)) then begin
case ssStatus.dwCurrentState of
SERVICE_STOPPED: Label1.Caption := 'Остановлен';
SERVICE_RUNNING: Label1.Caption := 'Запущен';
end;
end;
Maks150988
Не, пользовать "net stop" нехорошо. Если в батнике - то никуда не денешься, но в программе это не красиво и не управляемо. Плюс - запуск отдельного процесса интерпретатора, пусть даже и скрытого, а это лично мне вообще не нравится.
Небольшое уточнение: зачем ты это делаешь в отдельном потоке? В это время основной поток что-то делает или просто чтобы интерфейс программы "дышал"?
В любом случае, Sleep, на мой взгляд, некрасивое решение (особенно в основном потоке - пока Sleep не вернется, интерфейс не "дышит", поскольку не происходит выборка сообщений из очереди).
Лучше сделать, как сказал greenpc: организовать ожидание останова службы в цикле проверкой ее статуса. Вот пример для использования в основном потоке (при необходимости, добавляем первым условием в while проверку not Terminated, как в примере greenpc):
Код:
// ...код остановки службы из примера greenpc...
while (QueryServiceStatus(schService, ssStatus)) and (ssStatus.dwCurrentState = SERVICE_RUNNING) do
begin
{проверяем статус и если служба еще выполняется, то обрабатываем сообщения в очереди и заново проверяем}
Application.processmessage;
end;
// вот тут служба уже остановлена, можно ее заново запускать
Не, пользовать "net stop" нехорошо. Если в батнике - то никуда не денешься, но в программе это не красиво и не управляемо. Плюс - запуск отдельного процесса интерпретатора, пусть даже и скрытого, а это лично мне вообще не нравится.
Небольшое уточнение: зачем ты это делаешь в отдельном потоке? В это время основной поток что-то делает или просто чтобы интерфейс программы "дышал"?
В любом случае, Sleep, на мой взгляд, некрасивое решение (особенно в основном потоке - пока Sleep не вернется, интерфейс не "дышит", поскольку не происходит выборка сообщений из очереди).
Лучше сделать, как сказал greenpc: организовать ожидание останова службы в цикле проверкой ее статуса. Вот пример для использования в основном потоке (при необходимости, добавляем первым условием в while проверку not Terminated, как в примере greenpc):
Код:
// ...код остановки службы из примера greenpc...
while (QueryServiceStatus(schService, ssStatus)) and (ssStatus.dwCurrentState = SERVICE_RUNNING) do
begin
{проверяем статус и если служба еще выполняется, то обрабатываем сообщения в очереди и заново проверяем}
Application.processmessage;
end;
// вот тут служба уже остановлена, можно ее заново запускать
хм интересно ктото на мой вопрос ответит ?
d0m1nat0r321
Я так понял, необходимо манипулировать данными только программно? т.е. где-то есть кнопка, нажатие на которую приводит,скажем, к вставке записи, и она должна отобразиться в DBGrid, но непосредственно в DBGrid вводить новые записи или редактировать существующие не надо?
Если так, то я делал так: DBGrid - readonly, связанный TClientDataSet - readonly.
На сервере приложения реализуется метод для изменения данных (например вставка записи). Пусть это будет метод InsNewRec.
На клиенте делаю:
Код:
ClientDataSet.DisableControls;
ClientDataSet.Close;
try
//вызываем реализованный на сервере метод изменения данных (сами данные передаем ему в качестве параметров метода сервера):
ConnectionBroker.Connection.AppServer.InsNewRec(......);
finally
ClientDataSet.EnableControls;
ClientDataSet.Open;
{ если надо, выполняем переход на последнюю запись ('ID_REC' - ключевое поле, IDRec - его значение, в случае Firebird я его получаю вызовом на сервере приложения генератора перед вставкой):}
Locate('ID_REC', IDRec, []);
end;
Я так понял, необходимо манипулировать данными только программно? т.е. где-то есть кнопка, нажатие на которую приводит,скажем, к вставке записи, и она должна отобразиться в DBGrid, но непосредственно в DBGrid вводить новые записи или редактировать существующие не надо?
Если так, то я делал так: DBGrid - readonly, связанный TClientDataSet - readonly.
На сервере приложения реализуется метод для изменения данных (например вставка записи). Пусть это будет метод InsNewRec.
На клиенте делаю:
Код:
ClientDataSet.DisableControls;
ClientDataSet.Close;
try
//вызываем реализованный на сервере метод изменения данных (сами данные передаем ему в качестве параметров метода сервера):
ConnectionBroker.Connection.AppServer.InsNewRec(......);
finally
ClientDataSet.EnableControls;
ClientDataSet.Open;
{ если надо, выполняем переход на последнюю запись ('ID_REC' - ключевое поле, IDRec - его значение, в случае Firebird я его получаю вызовом на сервере приложения генератора перед вставкой):}
Locate('ID_REC', IDRec, []);
end;
d0m1nat0r321
Код: procedure TNewForm.dbgrd1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = Chr(VK_DOWN)) and (dbgrd1.DataSource.DataSet.Eof) then Key = #0;
end;
Код: procedure TNewForm.dbgrd1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = Chr(VK_DOWN)) and (dbgrd1.DataSource.DataSet.Eof) then Key = #0;
end;
Цитата:
Если так, то я делал так: DBGrid - readonly, связанный TClientDataSet - readonly.
я так тож сначала думал забрать поставить not edit но едит нужно
Цитата:
procedure TNewForm.dbgrd1KeyPress(Sender: TObject; var Key: Char);- так я тож уже делал всеравно он добавляет скорее чем происходит действие
begin
if (Key = Chr(VK_DOWN)) and (dbgrid1.DataSource.DataSet.Eof) then Key:=Chr(VK_UP);
end;
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
Предыдущая тема: Clipper 5
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.