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

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


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

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

Выпуск № 542
от 25.07.2006, 13:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 364, Экспертов: 52
В номере:Вопросов: 6, Ответов: 12


Вопрос № 49581: Добрый день, эксперты... Возник такой вопрос... Есть дисковый путь, который меняется.... В зависимости от открытого файла. Как мне вытащить имя файла, а то что-то не могу вспомнить как.... Если можно с примерами...
Вопрос № 49582: Здравствуйте! Помогите решить задачку. Подскажите как правильно рассчитать коефициент при выводе на печать текста Printer.Canvas.TextOut с учётом разрешения принтера чтоб при разном разрешении текст выводился одинаково на бумаге.<...
Вопрос № 49596: Кто нибудь знает, можно ли внедрить SWF (Flash-ку) в программу на дельфине. В смысле, что-бы она показывалась на форме....
Вопрос № 49623: Ув. Эксперты! Как реализовать перекодировку mp3 с битрейтом 128 кбит/с в mp3 с битрейтом 96 кбит/с. Хочется Группу файлов перекодировать.. Спасибо...
Вопрос № 49629: Уважаемые эксперты, здравия желаю! Пишу одну программку. На форме лежит три SpinEdit'a: SpinYear, SpnMonth и SpnDay. И еще есть Button "Ok". При щелчке по "Ok" необходимо проверить, верно ли введена дата в трех СпинЭдитах. Для...
Вопрос № 49687: Здравствуйте уважаемые мастера. Как из двух практически одинаковых форм (Form1 и Form2) в приложении печатать отчет QReport, который сидит на третьей форме (Form3)? Вопрос задан не очень понятно, лучше приведу код: 1.Вариант - ра...

Вопрос № 49.581
Добрый день, эксперты... Возник такой вопрос...
Есть дисковый путь, который меняется.... В зависимости от открытого файла.

Как мне вытащить имя файла, а то что-то не могу вспомнить как....
Если можно с примерами
Отправлен: 19.07.2006, 14:01
Вопрос задал: PheanixN (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, PheanixN!
Вам помогут функции ExtractFilePath() и ExtractFileDir(). Она возвращают путь к каталогу, в котором находится указанный файл. Обычно это используется совместно с текущим путём exe-файла приложения:
ExtractFilePath(Application.ExeName);
Это выдаст каталог, в котором расположена программа.
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 19.07.2006, 14:05

Отвечает: Rusland
Здравствуйте, PheanixN!
GetCurrentDir(); // получает путь
SetCurrentDir(); // устанавливает путь

---------
Если партия скажет есть контакт, будем есть контакт.
Ответ отправил: Rusland (статус: Специалист)
Ответ отправлен: 19.07.2006, 14:05

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

Вот предлагаю Вам такие функции:
ExtractFilePath(const FileName: string) - путь к файлу
ExtractFileName(const FileName: string) - имя файла
ExtractFileDrive(const FileName: string) - название диска
ExtractFileDir(const FileName: string) - путь к файлу

Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 19.07.2006, 14:13


Вопрос № 49.582
Здравствуйте!
Помогите решить задачку.
Подскажите как правильно рассчитать коефициент
при выводе на печать текста Printer.Canvas.TextOut
с учётом разрешения принтера
чтоб при разном разрешении текст выводился одинаково на бумаге.
Заранее спасибо!
Отправлен: 19.07.2006, 14:21
Вопрос задал: Vasiliy (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, Vasiliy!
Можно сделать что-то типа такого:
ScaleX := GetDeviceCaps(Printer.Handle, logPixelsX) div screen.PixelsPerInch;
ScaleY := GetDeviceCaps(Printer.Handle, logPixelsY) div screen.PixelsPerInch;
Только не забудте подключить модуль Printers.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 20.07.2006, 06:23


Вопрос № 49.596
Кто нибудь знает, можно ли внедрить SWF (Flash-ку) в программу на дельфине. В смысле, что-бы она показывалась на форме.
Отправлен: 19.07.2006, 17:27
Вопрос задал: Dr.Alex (статус: 10-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Dr.Alex!

Я думаю, Вам поможет это, это или это.

Удачи!
---------
Ответы на все вопросы - на сайте www.ya.ru
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 19.07.2006, 17:49
Оценка за ответ: 5

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

Предлагаю Вам воспользоваться бесплатным компонентом Flash for Delphi 1.0, который найти Вы сможете по ссылке: http://www.softok.org/coding/delphi/4716prog.html

Удачи!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 20.07.2006, 10:17
Оценка за ответ: 5


Вопрос № 49.623
Ув. Эксперты!
Как реализовать перекодировку mp3 с битрейтом 128 кбит/с в mp3 с битрейтом 96 кбит/с. Хочется Группу файлов перекодировать..
Спасибо
Отправлен: 19.07.2006, 22:23
Вопрос задал: $erBep (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, $erBep!
Скачайте Lame MP3 Encoder: http://lame.sourceforge.net/. С помощью него можно конвертировать формат MP3 (в том числе из WAV и из MP3). В справке описаны все параметры его работы. А запускать так: ShellExecute(0,'open','lame.exe','параметры','',SW_SHOWNORMAL);
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 20.07.2006, 08:04

Отвечает: PheanixN
Здравствуйте, $erBep!
К ответу предыдущего експерта могу только добавить, что есть еще такая софтинка. По сути тот же Lame, только с графическим интерфейсом, и писать параметры в командной строке не требуется...
http://www.freecodecs.net/files/lamexp.zip
Ответ отправил: PheanixN (статус: 3-ий класс)
Ответ отправлен: 20.07.2006, 10:24


Вопрос № 49.629
Уважаемые эксперты, здравия желаю!
Пишу одну программку. На форме лежит три SpinEdit'a: SpinYear, SpnMonth и SpnDay. И еще есть Button "Ok". При щелчке по "Ok" необходимо проверить, верно ли введена дата в трех СпинЭдитах. Для этого написал процедуру (в приложении). Когда запустил программу и ввел намеренно неверную дату (31 февраля 2006), Delphi "заругался". Вылетела ошибка: "Project myprog.exe raised exception class EConverError with message 'Invalid argument to date encode'". Программу я откомпилировал, и запустил уже exe-шный файл. Ввел опять неверную дату. Все нормально, программа выдала сообщение о неверно введенной дате. И программа не вылетела, продолжила работать дальше. У меня к Вам вопрос: что это, глюк Делфи (5-я версия) или все же проблема в алгоритме? Может я действительно что-то не верно написал в ниже приведенном алгоритме?
С уважением,
Александр (zimorodokbrest@rambler.ru)

Приложение:

Отправлен: 19.07.2006, 22:43
Вопрос задал: Зимородкин Александр (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tsechoev Bagaudin
Здравствуйте, Зимородкин Александр!
Все нормально, в режиме отладки исполнение программы прерывается в случае исключения. На то она и отладка :)
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: Tsechoev Bagaudin (статус: Студент)
Ответ отправлен: 19.07.2006, 23:25
Оценка за ответ: 5
Комментарий оценки:
Все понял! Благодарю за консультацию!

Отвечает: Melamed
Здравствуйте, Зимородкин Александр!
Если не хочешь, чтоб при отладке программа выскакивала, отключи обработку исключения EConverError отладчиком. Это делается в меню Tuls->Option или Tuls->Deduger (не помню как в Delphi 5). Потом на вкладке Language Exceptions  085;аходишь список Excthnion type to ignore и напротив ислючания EConverError ставишь галочку. Если этого исключения нету, то добавляещь его нажатием кнопки "Add" на этой вкладке. И все будет тип-топ.

P/S Извини, если что-то напутал. Риекомендацию писал сверяясь с Delphi 2005. Но в 5-ки такой механизм предусмотрен, это точно. Поищи
Ответ отправил: Melamed (статус: 2-ой класс)
Ответ отправлен: 20.07.2006, 00:56
Оценка за ответ: 5
Комментарий оценки:
Спасибо!

Отвечает: Савенко Вадим Иванович
Здравствуйте, Зимородкин Александр!
В дополнение к вышесказанному могу только посоветовать обрабатывать исключения с помощью блоков try ... except , а еще лучше не допускать исключений. Иначе Вы при написании какой-нибудь сложной программы будете долго разбираться, где вылезла ошибка
Ответ отправил: Савенко Вадим Иванович (статус: 4-ый класс)
Ответ отправлен: 20.07.2006, 10:16
Оценка за ответ: 5


Вопрос № 49.687
Здравствуйте уважаемые мастера.
Как из двух практически одинаковых форм (Form1 и Form2)
в приложении печатать отчет QReport, который сидит на
третьей форме (Form3)? Вопрос задан не очень понятно, лучше приведу код:

1.Вариант - работает:

На Form3:

type
TForm3 = class(TForm)
QReport: TQuickRep;
...........
private
...........
public
...........
end;

implementation
uses Form1,Form2;
.............

procedure TForm3.QReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
if Application.FindComponent('Form2') = nil then begin
with Application.FindComponent('Form1') as TForm1 do begin
// Работа с полями и параметрами по нескольким DataSet
// на Form1(DataSetы полностью индентичны с DataSetами на Form2).
.........
end;
end
else begin
with Application.FindComponent('Form2') as TForm2 do begin
// Работа с полями и параметрами по нескольким DataSet
// на Form2(DataSetы полностью индентичны с DataSetами на Form1).
.........(Тот же самый код)
end;
........
end;

И так во всех Bandax идет повторение кода.

2.Вариант - попытка избавиться от повторяющегося кода:

На Form3:

type
TForm3 = class(TForm)
QReport: TQuickRep;
private
...........
MyClass: TClass;
namf: string;
public
...........
end;

implementation
uses Form1,Form2;
.............

procedure TForm3.QReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
if Application.FindComponent('Form2') = nil then begin
MyClass:=TForm1;
namf:='Form1';
QReport.DataSet:=Form1.Query1;
...........
end
else begin
MyClass:=TForm2;
namf:='Form2';
QReport.DataSet:=Form2.Query1;
...........
end;
with Application.FindComponent(namf) as MyClass do begin
// Работа с полями и параметрами по нескольким DataSet
// на Form1 или Form2.
.........
end;
end;

Но в данном варианте компилятор не видит DataSetы, которые находятся
на Form1 или Form2. Где ошибка и как с ней бороться?
Отправлен: 20.07.2006, 13:13
Вопрос задал: Kraw (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 8)

Отвечает: Physicist
Здравствуйте, Kraw!

Раз формы почти одинаковые, то проще наследовать их от некоторого класса TMyForm, в котором должны быть описаны все DataSet'ы и т.д., используемые формой Form3. Тогда Вариант 2 будет работать, если объявить MyClass:TMyForm.
Ответ отправил: Physicist (статус: 7-ой класс)
Ответ отправлен: 20.07.2006, 13:24


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное