Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 79
от 26.03.2005, 21:10

Администратор:Калашников О.А.
В номере:Вопросов: 5, Ответов: 14


Вопрос № 18537: Здравствуйте, эксперты. Я не пойму, это глюк Delphi, или дело в другом. Мне нужно сделать, чтобы отрезки гистограммы (Bar) были определенного цвета. Захожу в настройки Chart'a, выбираю закладку Series/Format/Color... и задаю цвет. Но при выпо...
Вопрос № 18540: Здравствуйте, господа. Как осуществить обработку переданных программе параметров при запуске ? например "myprogram.exe /par1 /par2 ". Как эти par1 и par2 можно использовать в программе ? Знаю, что в WinMain передается парам...
Вопрос № 18541: Не подскажете, как из Delphi запретить копирование/перемещение каталогов, файлов? Нужна программа, которая запустит другую программу (запуск программы по команде WinAPI ShellExecute я знаю) и будет сидеть в памяти (а вот это пока не представляю, ...
Вопрос № 18543: Не знаю, куда бы задать этот вопрос: то ли в WinAPI, то ли в Assembler... Решил уж в Delphi... Так как программа на Delphi (для защиты кода... мне до сих пор не удалось найти из под отладчика где происходит вся работа программы на Delphi). Хотя, если...
Вопрос № 18560: ДЕКТХ 7, ME. ОПХ НРЙПШРХХ ТЮИКЮ Я ПЮЯЬХПЕМХЕЛ ".php" ShellExecute(0,'open',PChar(Edit1.Text),nil,nil,SW_SHOWNORMAL); ТЮИК МЕ НРЙПШБЮЕРЯЪ ОПНБЕПЙЮ МЮ НЬХАЙХ ОНЙЮГЮКЮ 'SE_ERR_NOASSOC мЕР ОПХКНФЕМХЪ ЯБЪГШБЮКЯЪ ДЮММШЛ fil...

Вопрос № 18537
Здравствуйте, эксперты.
Я не пойму, это глюк Delphi, или дело в другом.
Мне нужно сделать, чтобы отрезки гистограммы (Bar) были определенного цвета. Захожу в настройки Chart'a, выбираю закладку Series/Format/Color... и задаю цвет. Но при выполнении программы цвет отрезков все равно голубой. В чем проблема?
Спасибо за виши ответы.
Отправлен: 21.03.2005, 02:44
Вопрос задал: Lichkaty Alexander (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: SteelNick
Здравствуйте, Lichkaty Alexander!
Если ты создаешь новую серию рантайм - то и цвет устанавливай рантайм. Я только что создал в своем Delphi 6 приложение с chart и добавил две серии, одна с красным цветом столбцов, другая с зеленым. Все ок.
Ответ отправил: SteelNick (статус: Специалист)
Отправлен: 21.03.2005, 07:41

Отвечает: Malish
Здравствуйте, Lichkaty Alexander!
Когда строишь делай так Series1.AddX(-----,'Graf', clGreen); и у тебя будет задаваться цвет.
Ответ отправил: Malish (статус: 5-ый класс)
Отправлен: 21.03.2005, 21:52

Отвечает: sir henry
Здравствуйте, Lichkaty Alexander!
Трудно сказать. Может быть у Вас где-то в коде задается цвет? Или добавляются эти самые отрезки во время выполнения? Если во время выполнения, то цвет у них получается по умолчанию и его надо задать уже в коде в явном виде.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.03.2005, 05:25

Отвечает: Master135
Здравствуйте, Lichkaty Alexander!
Открой это под кодировкой Dos. Добавляй бары Series2.AddXY(0.02*Pi*i,sin(0.02*Pi*i),'',clRed); и тут явно указываешь цвет
Êàæäûé êîìïîíåíò ìîæåò âêëþ÷àòü íåñêîëüêî ñåðèé. Ñâîéñòâà ñåðèé óñòàíàâëèâàþòñÿ ñ ïîìîùüþ Ðåäàêòîðà Äèàãðàìì èëè ïðîãðàììíî.
Äëÿ çàäàíèÿ îòîáðàæàåìûõ çíà÷åíèé èñïîëüçóþòñÿ ìåòîäû ñåðèé Series. Îñíîâíûå èç íèõ:
· Clear - î÷èùàåò ñåðèþ îò çàíåñåííûõ ðàíåå äàííûõ
· Add - ïîçâîëÿåò äîáàâèòü â äèàãðàììó íîâóþ òî÷êó
· AddXY - ïîçâîëÿåò äîáàâèòü íîâóþ òî÷êó â ãðàôèê ôóíêöèè
Íàïðèìåð, ñëåäóþùèå îïåðàòîðû î÷èùàþò ñåðèþ Series1 è çàíîñÿò â íåå äëÿ îòîáðàæåíèÿ äèàãðàììû ÷åòûðå çíà÷åíèÿ, çàäàâàÿ îòîáðàæàþùèå èõ öâåòà:
With Series1 do
begin
Clear;
Add(A1,'Öåõ 1',clYellow);
Add(A2,'Öåõ 2',clBlue);
Add(A3,'Öåõ 3',clRed);
Add(A4,'Öåõ 4',clPurple);
end;
Ñëåäóþùèå îïåðàòîðû çàíîñÿò â ñåðèþ Series2 çíà÷åíèÿ, ïðåäíàçíà÷åííûå äëÿ îòîáðàæåíèÿ ãðàôèêà ñèíóñà:
Series2.Clear;
for i:=0 to 100 do
Series2.AddXY(0.02*Pi*i,sin(0.02*Pi*i),'',clRed);
Ñëåäóþùèé îïåðàòîð ïåðåíîñèò äàííûå ñåðèè Series1 â ñåðèþ Series3, ñâîéñòâà êîòîðîé, íàïðèìåð, îïðåäåëÿþò îòëè÷íûé îò Series1 òèï äèàãðàììû:
Series3.Assign(Series1);
Ñëåäóþùèå îïåðàòîðû îáåñïå÷èâàþò ñìåíó òèïà äèàãðàììû, ïåðåêëþ÷àÿ âèäèìîñòü ñåðèé Series1 è Series3:
Series1.Active:= not Series1.Active;
Series3.Active:= not Series3.Active;
Ответ отправил: Master135 (статус: 2-ой класс)
Отправлен: 22.03.2005, 16:49


Вопрос № 18540
Здравствуйте, господа.
Как осуществить обработку переданных программе параметров при запуске ?
например "myprogram.exe /par1 /par2 ". Как эти par1 и par2 можно использовать в
программе ?
Знаю, что в WinMain передается параметр lpCmdLine, но в дельфях нет доступа
к winmain'у. Вообщем, подскажите, как быть
Отправлен: 21.03.2005, 07:08
Вопрос задал: Salikoff (статус: Посетитель)
Всего ответов отправлено: 5

Отвечает: SteelNick
Здравствуйте, Salikoff!
Посмотри функции ParamCount и ParamStr.
Ответ отправил: SteelNick (статус: Специалист)
Отправлен: 21.03.2005, 07:37

Отвечает: Кудрявцев Андрей
Здравствуйте, Salikoff!
В Delphi для этого применяются ParamCount и ParamStr. ParamCount возвращает общее количество параметров запуска (от нуля, с учетом того, что нулевой параметр - имя программы), а ParamStr (n) - значение какого-то параметра, определенного через номер n. Для получения /par1 таким образом надо указать
StringOfParam := ParamStr(1)
Ответ отправил: Кудрявцев Андрей (статус: 1-ый класс)
Отправлен: 21.03.2005, 12:19

Отвечает: michael91
Здравствуйте, Salikoff!
Функция ParamStr(Index: integer)
где Index - индекс параметра (0 - имя исполняемого файла)

Приложение:

Ответ отправил: michael91 (статус: 2-ой класс)
Отправлен: 21.03.2005, 14:16
Оценка за ответ: 5

Отвечает: Sh-st
Здравствуйте, Salikoff!
Работай с paramstr
////
Ответ отправил: Sh-st (статус: 2-ой класс)
Отправлен: 21.03.2005, 14:48

Отвечает: sir henry
Здравствуйте, Salikoff!
Есть для этого две функции:
1. Paramcount() - возвращает кол-во параметров переданых программе.
2. Paramstr(Номер_параметра) - возвращает строку с тем параметром, номер которого указан.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.03.2005, 05:33


Вопрос № 18541
Не подскажете, как из Delphi запретить копирование/перемещение каталогов, файлов?
Нужна программа, которая запустит другую программу (запуск программы по команде WinAPI ShellExecute я знаю) и будет сидеть в памяти (а вот это пока не представляю, программа без формы, без консоли) и запрещать (вообще не представляю) копирование/перемещение каталогов и файлов (каталогов и файлов той программы, но это не суть важно). В основном, конечно перемещение, ведь работающую программу вроде нельзя перемещать, но, к сожалению, есть еще файлы данных, которые программа блокирует не все.
Еще желательно, конечно, чтобы эту программу нельзя было увидеть из диспетчера задач NT. Или ее нельзя было убить (а то смысл в запрете копирования/перемещения каталогов, если можно убить запрещающую программу и спокойно скопировать нужные файлы). Или хотя бы если ее убивают, то убивают и дочернюю программу (которую запрещающая программа запустила), с выполнением некоторых предупредительных действий для защиты файлов и каталогов от копирования/перемещения (то есть действий, с помощью которых такие манипуляции с файлами и каталогами становятся бессмысленными, но это также не важно, то есть не входит в тему моего вопроса).
О перемещении программы и файлов данных пока программа не запущена можно не беспокоиться, это бессмысленно.
Возможно ли такое в Delphi?
Отправлен: 21.03.2005, 08:13
Вопрос задал: Большаков Сергей Владимирович (статус: Посетитель)
Всего ответов отправлено: 1

Отвечает: sir henry
Здравствуйте, Большаков Сергей Владимирович!
Вообщето, это относится к системному администрированию. Может быть Вы сначала подумаете о том, что необходимо назначит соответствующие права пользователям?
Это более правильный подход. Еще, используйте для хранения данных сервер SQL. Он, ни мало не сомневаясь, запретит ЛЮБЫЕ действия производимые извне с файлами данных.
Что еще можно посоветовать? Открывайте файл с данными с помощью функции OpenFile(), с флагом OF_SHARE_EXCLUSIVE. Тогда Ваша программа не даст открыть этот файл другим процессам.
Это будет намного проще, чем запускать дополнительную прогу-монитор. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.03.2005, 05:42


Вопрос № 18543
Не знаю, куда бы задать этот вопрос: то ли в WinAPI, то ли в Assembler... Решил уж в Delphi... Так как программа на Delphi (для защиты кода... мне до сих пор не удалось найти из под отладчика где происходит вся работа программы на Delphi). Хотя, если все будет просто, можно и на Ассемблере, так как ни окна, ни консоли, вообще ничего интерактивного в ней нет.
А вопрос заключается вот в чем:
Как бы поточнее сформулировать...
Нужно создать защиту программы от копирования... На диске есть программа, она испорчена, то есть не запускается (это специально, чтобы было бессмысленно копировать). И есть другая программа, которая должна проверить некоторые условия квалитета допуска :) и (вот сам вопрос) должна загрузить испорченную программу в память, исправить ее (ну изменить на правильные некоторые известные байты) и запустить из памяти (не с диска). Обязательно из памяти, чтобы и при работе программы (она ведь уже исправлена и работает) бессмыслено было копировать ее испорченный вариант в файле на диске. Естественно, для запущенной исправленной программы такие действия должны быть незаметны.
Это, наверное, придется со встроенного ассемблера. Мне известны команды WinAPI: запуск ShellExecute (запуск программы), GlobalAlloc (выделение памяти), ReadFile (чтение файла в память). Но запуск программы, находящейся в памяти, мне неизвестно. И неизвестно, как это отразится на ее работе.
Если вопрос действительно не туда, то простите...
Отправлен: 21.03.2005, 08:47
Вопрос задал: Большаков Сергей Владимирович (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Voituk Alexander
Здравствуйте, Большаков Сергей Владимирович!
Я думаю, что ничего не получится. Многие отладчики позволяют прицепиться к запущенному процессу в памяти и сохранить его на диск. Поэтому достаточно загрузить испорченную прогу в память, чтобы она пошла, а потом прицепиться к ней и получить уже исправленные коды.
Ответ отправил: Voituk Alexander (статус: 4-ый класс)
Отправлен: 21.03.2005, 12:11

Отвечает: sir henry
Здравствуйте, Большаков Сергей Владимирович
А если так попробовать:
Вы считываете испорченую программу как типизированый файл типа Byte, переставляете какие нужно байты, записываете ее под каким-нибудь малопонятным именем обратно на диск и потом запускаете с помощью ShellExecute()? После того как испорченая прога закончила работать, Вы ее исправленый эквивалент стираете с диска.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.03.2005, 05:47
Оценка за ответ: 5
Комментарий оценки:
Спасибо, что правильно поняли мою мысль.


Вопрос № 18560
ДЕКТХ 7, ME.
ОПХ НРЙПШРХХ ТЮИКЮ Я ПЮЯЬХПЕМХЕЛ ".php"
ShellExecute(0,'open',PChar(Edit1.Text),nil,nil,SW_SHOWNORMAL);
ТЮИК МЕ НРЙПШБЮЕРЯЪ
ОПНБЕПЙЮ МЮ НЬХАЙХ ОНЙЮГЮКЮ
'SE_ERR_NOASSOC мЕР ОПХКНФЕМХЪ ЯБЪГШБЮКЯЪ ДЮММШЛ filename ПЮЯЬХПЕМХЕЛ.'
ЙЮЙ ГЮЯРЮБХРЭ ТЮИК НРЙПШРЭЯЪ.
ФЕКЮРЕКЭМН ОПХЛЕП.
Отправлен: 21.03.2005, 14:13
Вопрос задал: vvavva (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: michael91
Здравствуйте, vvavva!
SE_ERR_NOASSOC значит, что у тебя в системе не установлено приложение, открывающее файлы .php. Попробуй открывать файл стандартным для делфи образом: системными функциями или WinAPI.
Ответ отправил: michael91 (статус: 2-ой класс)
Отправлен: 21.03.2005, 18:35

Отвечает: sir henry
Здравствуйте, vvavva!
Для это нужно, как минимум, установить интерпретатор PHP. :))
Далее, возможно понадобится связать расширение php с интерпретатором, т.е. сделать "Открыть с помощью..." и выбрать интерпретатор для командной строки, а не для веб-сервера.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 22.03.2005, 06:48


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться

В избранное