Вопрос № 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), а потом из него читать.
Отвечает: Проходящий Мимо
Здравствуйте, 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);
Где 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 (статус: 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.
Так как пример достаточно боьшой и возможно не понятный то я советую Вам раздобыть вот такую книгу:
Михаил Фленов. 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 :)
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Shnuroid!
Я так понимаю, что это ваша собственная почтовая программа. Я думаю, что нужно правильно читать заголовки сообщения:
Ищите в сети по RFC 822 и RFC 1521
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Дмитрий Александрович!
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). Необходимо явное преобразование:
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 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