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

» Вопросы по Delphi (до версии 2009) - часть 5

Автор: JohnSilver182
Дата сообщения: 05.10.2009 16:56
А Я тоже подцепил такой триперрок (
Автор: SIgor33
Дата сообщения: 06.10.2009 08:12
Скажите как средствами delphi запустить vba макрос excel с параметром (передать в качестве параметра число)
Автор: greenpc
Дата сообщения: 06.10.2009 09:10
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;
Автор: SIgor33
Дата сообщения: 06.10.2009 09:23
greenpc
Спасибо за совет
Автор: mdid
Дата сообщения: 06.10.2009 17:49
подскажите плз...как сделать грид по типу 1С?
http://pic.ipicture.ru/uploads/091006/y7xSYbK51g.jpg
тоесть меня интерисуеет 2 строки в 1 ячейке...не мультистрочность а именно 2 разных поля
Автор: volser
Дата сообщения: 06.10.2009 18:20
mdid
TcxGrid может от DevExpress.
Автор: mdid
Дата сообщения: 06.10.2009 18:24
пасиб..ща поищу
Автор: VandB
Дата сообщения: 06.10.2009 21:48
Привет всем.
У меня такой вопрос по Delphi. Я взялся за проект "Виртуальный музей". То есть 3D версия музея. Если кто , что знает по такой теме пожалуйся напишите мне ! ( Я с 3D на Delphi до это того не занимался) Мне важна любая информация. Помогите кто чем может. Может у кого есть литература ссылки исходники и т.д. А по ходу дела я буду задавать вопросы ( если Вы конечно не против).
Автор: andrewtishkin
Дата сообщения: 06.10.2009 23:32

Цитата:
литература ссылки исходники

Погугли "delphi opengll" и "delphi directx"
А вообще для создания подобных 3D-проектов есть специализированный софт, даже бесплатный. Ручками же создавать подобное в Delphi - ой, ё... imho
Автор: Smokeer
Дата сообщения: 07.10.2009 00:26
Есть написаный клас для поиска файлов на диске. Нужно приделать к нему ползунок для отображения продвижения (0% .. 100%)
Вопрос: как вычислять прогрес? Допустим если у меня было бы изначально количество всех файлов на диске (в каталоге) - не вопрос... но у меня изначально такой инфы нет, а делать специально для этого проход перед началом непосредственно поиска нежелательно - лишнее время.
Автор: V1s1ter
Дата сообщения: 07.10.2009 02:46
VandB
Начни отсюда для DirectX
http://www.micrel.cz/Dx/
или отсюда для OpenGL
http://glscene.sourceforge.net/wikka/HomePage
для визуализации оба подойдут хорошо, но создавать лучше в 3dMax...
Автор: andrewtishkin
Дата сообщения: 07.10.2009 03:29

Цитата:
Вопрос: как вычислять прогрес?

Тогда никак. Нужен ли он вообще? Иногда достаточно просто анимации (например, Marquee Style или "лупа, бегающая по листу бумаги")

Цитата:
но у меня изначально такой инфы нет

Если анимация не устраивает - надо получать инфу. Когда-то видел пример на Delphi довольно быстрого получения количества файлов (проход по всем поддиректориям)...

Цитата:
а делать специально для этого проход перед началом непосредственно поиска нежелательно - лишнее время.

Без проблем - выполняем эту операции параллельно с поиском, в отдельном потоке Чем продолжительнее поиск, тем точнее будет индикация, ну а для непродолжительного так как раз точность индикации не имеет особого значения.
То есть сделать примерно так, как выполнен прогрессбар в адресной строке окна поиска в Windows Vista/7, по которому можно судить о примерном окончании процесса. Правда там за точностью не гнались, похоже обошлись-таки больше анимацией, чем данными о кол-ве файлов (это кол-во, imho, "выдёргивается" из индекса Windows) - прогресс двигается медленно-медленно, зато потом рванёт от 25% к 100 при завершении поиска
Автор: SReg84
Дата сообщения: 07.10.2009 12:00
JohnSilver182

Цитата:
А Я тоже подцепил такой триперрок

Кстати вот один человек хороший с CrackL@b.ru написал свою антивирусник, специально заточеный под Индюк'a
Anti.Win32.Induc.v.0.13 (256.76 KB)
ссылка на тему
Автор: SIgor33
Дата сообщения: 07.10.2009 13:01
Скажите как узнать средствами Delphi является ли данная ячейка на листе excel защищенной от редактирования
Автор: YuriyRR
Дата сообщения: 07.10.2009 15:07
mdid
Я использовал DevExpres QuantumGrid - он такое может
Автор: d0m1nat0r321
Дата сообщения: 07.10.2009 15:53
Здраствуйте! У меня такой вопрос к тем кто создавал базы даних с помощю ClienDataSet.
Создал базу с ситемой подкатегорий, для регистрации даных в больнице, но вот мешает одна функцыя добавления даних в DBGrid (когда в конце базы нажимаем кнопку вниз и добавляется новое поле). Каким образом можно отключить возможность добавления даних клавишей вниз (но не изменяя права доступа, ибо нужно додавать програмно, просто отключить добавление с кнопки вниз)

ps. У меня очень плохо с руским, сам не руский )))
Автор: Maks150988
Дата сообщения: 07.10.2009 18:11
Здравствуйте. Такое дело. Значит запускаю функцию в отдельном потоке. Там значит останавливаю и запускаю службу. Дело это не быстрое. Обычно в код добавлял Sleep, но это чисто так для вида притормаживать выполнение в циклах и тд что вот мол программа старается трудится и спешить в общем-то некуда. А тут пока служба остановится, дальше в потоке идет код запуска ее и получается он тупо мимо проходит и пользователь остается с остановленной службой. Может есть какой-нибудь способ синхронизации в самом потоке мол пока не выпоним в нем что-то то дальше код не будем выполнять?
Автор: VandB
Дата сообщения: 07.10.2009 18:32
andrewtishkin
Все возможно ) а главное надо руками В принципе задача не очень тяжелая , я по разобрался А например ( софт для этого бесплатный))
V1s1ter
большое спасибо
==============================================================================================
Вот у меня назрел вопросик:
Мне нужен компонент для открытия и просмотра 3ds max файлов. То есть тип такого :

PS это я на Фотошопе нарисовал для визуализации
Что бы поддерживалась анимация, увиличенине, вращение и тд.
Автор: psa1974
Дата сообщения: 07.10.2009 20:33
Maks150988
Я таки понял, что манипулируешь ты не самим написанной службой, а просто какой-то службой в системе? И алгоритм такой: даешь команду остановить службу, делаешь определенный Sleep, надеясь, что этого хватит для останова службы, после чего не глядя на действительное состояние службы пытаешься ее запустить. И проблема в том что отведенного Sleep'ом времени не хватает. И реально выполняется попытка запустить еще не остановленную службу. Так?
Скорее всего - да. В этом случае надо использовать Service API , в частности там есть функция EnumServicesStatus(), которая позволяет перечислить службы в системе, узнать их имена и текущее состояние. Или ControlService() с параметром SERVICE_CONTROL_INTERROGATE (позволяет узнать о состоянии службы в данный момент). Т.е. останавливаешь службу (опять же лучше всего средствами Service API), ждешь, пока она действительно не остановится, контроллируя ее статус и только потом снова ее запускаешь. Вот мегаполезная статья по этому поводу (с примерами на Дельфи):
http://bugtraq.ru/forum/faq/programming/services.html
Автор: V1s1ter
Дата сообщения: 07.10.2009 20:44
VandB

Цитата:
я по разобрался

Если бы "по разбирался" такого вопроса

Цитата:
Мне нужен компонент для открытия и просмотра 3ds max файлов

не возникло бы. Таже GLScene эти файлы читает и даже готовая демка есть...

Автор: VandB
Дата сообщения: 07.10.2009 23:24
V1s1ter
glscene Delphi 2009 не поддерживается...... есть альтернатива или сам glscene для Delphi 2009?
Автор: V1s1ter
Дата сообщения: 08.10.2009 00:39
VandB

Цитата:
glscene Delphi 2009 не поддерживается...

Странно я об этом не знал, но файлы dpk для D2009 и D2010 видел.
Если серьезно, то я немогу гарантировать правильность сборки под 2009 или 2010 ибо пользую 2007. Но если у Вас проблемы с получением кода через механизм CVS (Concurrent Versions System), то могу выложить последнее обновление.
Автор: Maks150988
Дата сообщения: 08.10.2009 05:35
psa1974
Да, именно так. Требуется перезапускать DHCP клиент. Sleep, конечно можно, но есть такой вопрос. Вот если из командной строки останавливать эту службу под вистой/семеркой, там предлагают остановить еще и WinHTTP службу. С этим проблем не будет? Просто раньше я через WinExec выполнял "net stop" для службы и все стопорилось на этих системах, потому как скрывал окошко интерпретатора и пользователь не видел что там оказывается вручную надо подтвердить еще перезапуск. Да и Sleep большой неохото делать, просто код выполнять не в отдельном потоке, он последовательно сам выполнится и все когда надо, а тут кот в мешке.
Сейчас да, останавливаю через Service API, но я честно не знаю как в самом потоке зацикливать выполнение задачи что-то наподобие repeat untill или чего там надо для него. Что-нибудь типа repeat нужно где проверять состояние службы и если она не готова, делать Sleep ну или как-то так.
Автор: V1s1ter
Дата сообщения: 08.10.2009 08:18
VandB
Вот последняя GLScene с поддержкой D4-D2010
http://rapidshare.com/files/290131228/SC2.rar.html
Автор: greenpc
Дата сообщения: 08.10.2009 10:02
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;
Автор: psa1974
Дата сообщения: 08.10.2009 11:03
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;
// вот тут служба уже остановлена, можно ее заново запускать
Автор: d0m1nat0r321
Дата сообщения: 08.10.2009 11:18
хм интересно ктото на мой вопрос ответит ?
Автор: psa1974
Дата сообщения: 08.10.2009 11:51
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;
Автор: greenpc
Дата сообщения: 08.10.2009 11:56
d0m1nat0r321

Код: procedure TNewForm.dbgrd1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = Chr(VK_DOWN)) and (dbgrd1.DataSource.DataSet.Eof)    then Key = #0;
end;
Автор: d0m1nat0r321
Дата сообщения: 08.10.2009 12:44

Цитата:
Если так, то я делал так: 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, истории становления российского интернета. Сделано для людей.