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

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


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

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

Выпуск № 478
от 20.05.2006, 17:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 344, Экспертов: 65
В номере:Вопросов: 7, Ответов: 15


Вопрос № 43020: В очередной раз здравствуйте! Вопрос такой: Как предусмотреть в собственной процедуре(или функции) ввод необязательных параметров?...
Вопрос № 43021: Вечер добрый! Еще парачка вопросов: 1. Как програмно выполнить резервное копирование базы *.gdb под INTERBASE 4.2 и ее восстановление? 2. Как получить список запущеных служб? 3. Возможно ли запустив какую-нибудь команду с пом. Win...
Вопрос № 43064: Всем привет! Подскажите пожалуйста. Я вывожу вычисленное значение через label. Значение изначально типа real. соответственно получаю длииииииииииииииинную цифру...как же укоротить??? :) Пример: var S:real; begin lable1.Capti...
Вопрос № 43075: Здравствуйте, Как можно изменить цвет MainMenu ... Нигде про это не нашёл... Плохо искал?... Спасибо......
Вопрос № 43083: Программа по приему электронной почты, при приеме в поле "от" и "тема письма" отображается кодировка вместо нармальных слов! как разкодировать тему письма и поле "от"...
Вопрос № 43118: Здравствуйте Многоуважаемые эксперты!!! Как сделать так, что бы размер Timage можно было бы изменять в run-time?...
Вопрос № 43121: Уважаемые эксперты. Почему не удаётся вставить имя формы в функцию Application.MessageBox('Текст' +Form1.Caption+ 'Текст', 'Текст', MB_ICONSTOP). Спасибо....

Вопрос № 43.020
В очередной раз здравствуйте!
Вопрос такой:
Как предусмотреть в собственной процедуре(или функции)
ввод необязательных параметров?
Отправлен: 14.05.2006, 18:51
Вопрос задал: Mo-skin (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Злоумышленник
Здравствуйте, Mo-skin!
procedure CompactDatabase_JRO(DatabaseName:string;DestDatabaseName:string='';Password:string='');
Два последних параметра - необязательные (со значением по умолчанию). В проге можно вызвать так:
CompactDatabase_JRO('c:db1.mdb');
или так:
CompactDatabase_JRO('c:db1.mdb','c:db2.mdb';'12345');
Параметры по умолчанию должны распологаться в конце списка параметров; ими могут быть только обычные типы, указатели или множества; могут передаваться только по значению или с модификатором const, не могут быть ссылкой или нетипизированным параметром

Приложение:

Ответ отправил: Злоумышленник (статус: 7-ой класс)
Ответ отправлен: 14.05.2006, 19:48
Оценка за ответ: 5
Комментарий оценки:
Благодарю!


Вопрос № 43.021
Вечер добрый!
Еще парачка вопросов:
1. Как програмно выполнить резервное копирование базы *.gdb
под INTERBASE 4.2 и ее восстановление?
2. Как получить список запущеных служб?
3. Возможно ли запустив какую-нибудь команду с пом. WinExec(), например DIR, получить результаты в свое приложение. Если да, то как?
Отправлен: 14.05.2006, 19:03
Вопрос задал: Mo-skin (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Mo-skin!
1. Например, с помощью того же WinExec, выполнить команду xcopy.
Для восстановления, очевидно, выполнить обратную операцию. Правда, не уверен, что это именно то, что вам было нужно.
2. net start.
3. В двух словах можно сказать, вот ссылка: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=736

Если совсем лениво разбираться, то есть простой вариант через ж:
перенаправить вывод в файл (dir >> filename), а потом из него читать.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 4-ый класс)
Ответ отправлен: 14.05.2006, 21:20

Отвечает: Проходящий Мимо
Здравствуйте, Mo-skin!
1. Бросаем на форму компонент IBBackupService с закладки "InterBase Admin".
2. Выполняем процедуру резервного копирования:

var BackupName:string;
.......
with IBBackupService1 do
begin
ServerName:='localhost';
LoginPrompt:=False;
Params.Add('user_name=sysdba');
Params.Add('password=masterkey');
Active:=True;
try
DatabaseName:='C:REALIZ.GDB';
BackupName:='C:BackupRealiz-'+FormatDateTime('dd.mm.yyyy hh-mm-ss', now)+'.GBK';
BackupFile.Add(BackupName);
ServiceStart;
While not Eof do
finally
Active := False;
end;
end;
3. Готово

Для восстановления:
1. Бросаем на форму IBRestoreService
2. Выполняем процедуру восстановления, перед этим нужно проверить, есть ли коннекты к базе. Этим занимается компонент IBDatabaseInfo, для красоты всю информацию о процессе выводим в Memo1:

var RestoreName:string;
........
if IBDatabaseInfo1.UserNames.Count>1 then
begin
Application.MessageBox(Pchar('Кина не будет, к базе подключено пользователей '
+IntToStr(IBDatabaseInfo1.UserNames.Count) + ' шт!'),'Error',
MB_OK+MB_ICONWARNING);
exit;
end;

IBDatabase1.Connected:=false;
with IBRestoreService1 do
begin
Active:=False;
LoginPrompt:=False;
BackupName:='C:BackupRealiz-01012006.GBK';
DM.IBRestoreService1.DatabaseName.Add('C:REALIZ.GDB');
Params.Add('user_name=sysdba');
Params.Add('password=masterkey');
Memo1.Lines.Clear;
Memo1.Lines.Add(' ');
try
BackupFile.Add(BackupName);
Active:=True;
ServiceStart;
While not Eof do
begin
Application.ProcessMessages;
Memo1.Lines.Add(GetNextLine);
end;
finally
Active := False;
end;
end;

3. Соответственно, данные типа user_name, password, BackupFile можно (и нужно) запрашивать у пользователя, нечего всяким юзерам затирать архивом рабочую базу данных! Всё.
---------
Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 3-ий класс)
Ответ отправлен: 15.05.2006, 12:24
Оценка за ответ: 5
Комментарий оценки:
ГУД!


Вопрос № 43.064
Всем привет!
Подскажите пожалуйста. Я вывожу вычисленное значение через label. Значение изначально типа real. соответственно получаю длииииииииииииииинную цифру...как же укоротить??? :)
Пример:
var
S:real;
begin
lable1.Caption:=foattostr(s);
Отправлен: 15.05.2006, 11:20
Вопрос задала: Артемова Марина (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Gh0stik
Здравствуйте, Артемова Марина!

Вот командочка которая вас интересует:

FloatToStrF(s,ffFixed,maxint,2);

Где s - переменная типа real
2 - количество знаков после запятой
Возможно это Вам поможет, удачи!!!

---------
Мыслю - значит существую (Декарт)
Ответ отправил: Gh0stik (статус: 7-ой класс)
Ответ отправлен: 15.05.2006, 11:28

Отвечает: Евгения
Здравствуйте, Артемова Марина!
Также можно округлить число функцией RoundTo
function RoundTo(const AValue: Double, const ADigit: TRoundToRange): Double;
AValue - число, которое надо округлить
ADigit - количество знаков от -37 до 37
-2 - до двух знаков после запятой 3,14213 -> 3,14; 3,1456 -> 3,15
2 - до двух знаков до запятой 123456 -> 123500

В разделе Unit требуется добавить юнит Math.

var
S: real;
begin
lable1.Caption:=floattostr(RoundTo(s,-4));

Счастливо!
---------
Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус: 4-ый класс)
Ответ отправлен: 15.05.2006, 11:42

Отвечает: Zubex
Здравствуйте, Артемова Марина!
В дополнение к ответам предыдущих экспертов предлагаю использовать функцию FormatFloat. Она дает больше возможностей для представления в виде строки. Подробнее смотрите в хелпе.

Пример:
lable1.Caption:=FormatFloat('0.00',s);
В данном примере число 1,23456789 будет представлено как 1,23.

Удачи!
---------
Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 6-ой класс)
Ответ отправлен: 15.05.2006, 13:34

Отвечает: komatoz
Здравствуйте, Артемова Марина!
используй функцию округления

Приложение:

Ответ отправил: komatoz (статус: 2-ой класс)
Ответ отправлен: 16.05.2006, 03:23

Отвечает: Lexus
Здравствуйте, Артемова Марина!

Здесь несколько выходов:
1) Просто округлять число с помощью round(s:real) а потом преобразовывать в строку
2) Если 1 не подходит то я бы посоветовал вместо FloatToStr использовать FloatToStrF, например:
label1.Caption:=floattostrF(s,fffixed,{Точность},{Кол-во знаков после запятой});
где:
* ffFixed - формат представления числа с фиксированным количеством знаков после запятой (вообще доступны еще несколько, например ffExponent - в виде мантисы и экспоненты, или ffCurrency - в денежном виде, но для ваших целей подходит ffFixed)
* {точность} - Количество знаков (включая знаки и до запятой и после), до которых производится перевод. Если вы используете большие или неизвестные числа нецелого типа, то ставьте эту величину заведомо большой, например 10 или 20.
* {Кол-во знаков после запятой} - но а это наверно понятно и без объяснения. Ставьте 0 если нужно вообще без запятой.
Ответ отправил: Lexus (статус: 3-ий класс)
Ответ отправлен: 16.05.2006, 10:32


Вопрос № 43.075
Здравствуйте,

Как можно изменить цвет MainMenu ...

Нигде про это не нашёл... Плохо искал?...

Спасибо...
Отправлен: 15.05.2006, 12:20
Вопрос задал: Wlp (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Wlp!
Как сделать стандартными средствами я не знаю, но вот с помощью вот этого:
http://www.tmssoftware.com/advmenu.htm
компонента это делать легко и просто. Менюшки как у Office XP, 2003 или же на Ваш вкус.
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: 9-ый класс)
Ответ отправлен: 15.05.2006, 12:36
Оценка за ответ: 5
Комментарий оценки:
Спасибо...
Но хотелось бы конечно поиздеватся над стандартным меню...

Отвечает: Gh0stik
Здравствуйте, Wlp!

Вот в приложении пример который позволяет изменить цвет и не только.
Да при использавании примерчика не забывайте предварительно описывать процедуры в разделе interface.

Так как пример достаточно боьшой и возможно не понятный то я советую Вам раздобыть вот такую книгу:

http://c-books.info/books/load.php?ty=delphi&lng=RU

Михаил Фленов. Delphi 2005. Секреты программирования
Глава 2. Советы и секреты
стр.82 - Красивые меню

Вот начиная со странички 82 и заканчивая 88 идет разяснения работы с меню.

Приложение:

---------
Мыслю - значит существую (Декарт)

Ответ отправил: Gh0stik (статус: 7-ой класс)
Ответ отправлен: 15.05.2006, 13:27
Оценка за ответ: 5
Комментарий оценки:
Спасибо...
Ещё полностью не разобрался...
Но работает...

Ещё бы хотелось цвет самой строки меню поменять...


Вопрос № 43.083
Программа по приему электронной почты, при приеме в поле "от" и "тема письма" отображается кодировка вместо нармальных слов!
как разкодировать тему письма и поле "от"
Отправлен: 15.05.2006, 13:27
Вопрос задал: Shnuroid (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Shnuroid!
А в чем сложность? Отправляешь себе письмо, смотришь, какой букве из темы письма какие коды соответствуют, а потом в программе меняешь символы в строке - код на "закодированный символ", т.е. "декодируешь" текст.
Более подробно не могу ответить, т.к. не знаю как Вы получаете почту.
---------
Ответы на все вопросы - на сайте www.ya.ru :)
Ответ отправил: Устинов Сергей Евгеньевич (статус: 9-ый класс)
Ответ отправлен: 15.05.2006, 14:03

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Shnuroid!
Я так понимаю, что это ваша собственная почтовая программа. Я думаю, что нужно правильно читать заголовки сообщения:
Ищите в сети по RFC 822 и RFC 1521
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 4-ый класс)
Ответ отправлен: 15.05.2006, 14:58


Вопрос № 43.118
Здравствуйте Многоуважаемые эксперты!!!
Как сделать так, что бы размер Timage можно было бы изменять в run-time?

Приложение:

Отправлен: 15.05.2006, 17:02
Вопрос задал: Дмитрий Александрович (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Дмитрий Александрович!

var w,h: integer;
...
[Form1.]Image1.Width := w;
[Form1.]Image1.Height := h;

А если вы создаете его в Run-Time, то эти параметры прописывать обязательно.

Если надо растянуть картинку в "неродное" разрешение, то используте CopyRect(). Правда, он не делает абсолютно никакой интерполяции - при сильном сжатии появляются артефакты, да и при растяжении в нецелую величину(1 < k < 2) раз - тоже.
Ответ отправил: Сухомлин Кирилл Владимирович (статус: 4-ый класс)
Ответ отправлен: 15.05.2006, 17:17
Оценка за ответ: 4
Комментарий оценки:
Спасибо за ответ! Возможно я неправильно сформулировал вопрос. хотелось бы что б у компонента появились "узлы", за которые мышью можно было бы изменить размер.


Вопрос № 43.121
Уважаемые эксперты. Почему не удаётся вставить имя формы в функцию Application.MessageBox('Текст' +Form1.Caption+ 'Текст', 'Текст', MB_ICONSTOP). Спасибо.
Отправлен: 15.05.2006, 17:26
Вопрос задал: NVL (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лукьяненко Алексей Валериевич
Здравствуйте, NVL!

Потому что тип передаваемого выражения (String) не соответствует типу параметра процедуры (PChar). Необходимо явное преобразование:

Application.MessageBox(PChar('Текст' +Form1.Caption+ 'Текст'), 'Текст', MB_ICONSTOP).
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 3-ий класс)
Ответ отправлен: 15.05.2006, 17:30
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Я ошибся в том что приводил к PChar только Form1.Caption

Отвечает: $erBep
Здравствуйте, NVL!
Если точно отвечать на твой ворос. То имя формы не удаётся вставить лишь потому, что Form1.Caption имеет тип String, а в функции Application.MessageBox можно использовать только тип AnsiChar. Единственное решение перекодировать String to AnsiChar.
---------
Купи самоучитель - хуже не будет.
Ответ отправил: $erBep (статус: 2-ой класс)
Ответ отправлен: 16.05.2006, 18:06


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.32 от 03.05.2006
Яндекс Rambler's Top100

В избранное