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

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


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

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

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

Выпуск № 353
от 13.01.2006, 00:00

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


Вопрос № 32802: Уважаемые Эксперты, с Новым годом и с Рождеством! Подскажите пож-та, каким образом можно в Дельфи работать с МР3 файлами? В часности, как можно изменить Битрейт файла МР3 с помощью Дельфи?...
Вопрос № 32812: Здравствуйте! Не получается процедура удаления файла. Подскажите как сделать правильно. Спасибо. procedure DeleteF(const FileName:string); private { Private declarations } public { Public declarations } e...
Вопрос № 32822: Здравствуйте! Не подскажите как послать нажатие правой клавиши мыши другому окну. И возможно ли это сделать при условии что оно(другое окно) будет неактивным?...
Вопрос № 32839: Здравствуйте,уважаемые эксперты. Я только начинаю изучать делфию У меня такой вопрос. Как Вводить текст в Edit из переменной и как вводить. ...
Вопрос № 32844: Как вставить в программу собственный курсор?...

Вопрос № 32.802
Уважаемые Эксперты, с Новым годом и с Рождеством!
Подскажите пож-та, каким образом можно в Дельфи работать с МР3 файлами?
В часности, как можно изменить Битрейт файла МР3 с помощью Дельфи?
Отправлен: 07.01.2006, 00:39
Вопрос задал: Чернявский Александр (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Чернявский Александр!
Стандартными средствами Delphi MP3-файл можно разве что открыть и воспроизвести - с помощью TMediaPlayer. Чтобы изменить битрейт (и другие параметры), нужно воспользоваться кодерами. Широкую популярность приобрёл LAME. Он хорошо и достаточно быстро работает с mp3 и wav файлами. Работает исключительно из командной строки. Понимает огромное количество параметров - все они описаны в прилагаемой справке. Вот ссылки на Lame:

http://lame.sourceforge.net/download/download.html
http://www.free-codecs.com/download/Lame_Encoder.htm
http://spaghetticode.org/lame/
http://www.softpedia.com/get/Multimedia/Audio/Audio-CD-Rippers-Encoders/LAME-MP3-Encoder.shtml
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 07.01.2006, 08:45


Вопрос № 32.812
Здравствуйте!
Не получается процедура удаления файла.
Подскажите как сделать правильно.
Спасибо.

procedure DeleteF(const FileName:string);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DeleteF(const FileName: string);
var
f:file;
begin
try
DeleteFile(PChar(FileName));
except
begin
try
AssignFile(f, FileName);
Erase(f);
CloseFile(f);
except
ShowMessage('Удаление невозможно');
end;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
f: string;
begin
DeleteF (FileName);
DeleteFile(f, 'C:Program Filescall est.exe');// Не идет ошибка
end;
Отправлен: 07.01.2006, 06:18
Вопрос задал: Serhik_z (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Diman_A
Здравствуйте, Serhik_z!
Как я понял, ты хочешь выдать свое сообщение при отсутствии файла на диске. Но зачем столько кода? В delphi присутствует функция fileexists, которая может проверить существование файла. В случае отсутствия файла возвращает false. Вот процедура корректного удаления:
procedure delete(filename:string);
begin
if fileexists (filename) then deletefile (filename)
else showmessage ('Файл не существует');
end;
Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 07.01.2006, 07:49

Отвечает: Denisss
Здравствуйте, Serhik_z!

Ошибки и не будет. Смотрите описание функции DeleteFile:
  function DeleteFile(const FileName: string): Boolean;
Иначе говоря, функция выдает True, если никакой ошибки не произошло и False, если произошла ошибка (файл не существует, либо не удалось его удалить).
Т.о., Вам надо переделать код приблизительно так, как в приложении.

Удачи в Новом Году и с Рождеством!!!

Приложение:

Ответ отправил: Denisss (статус: Специалист)
Отправлен: 07.01.2006, 11:49

Отвечает: D.M.
Здравствуйте, Serhik_z!
В приложении процедура удаления файла....
Выдает ошибку. если не найден файл, или его низя открыть....

P.s.
Не обижайтесь, но у вас отвратный стиль написания кода и фиг его разберешь из-за этого......
Есои хотите, то могу прислать вам хороший документ, который описывает правила холосего тона.... :-)

Приложение:

---------
Зёзики руллллят :)

Ответ отправил: D.M. (статус: 1-ый класс)
Отправлен: 07.01.2006, 13:27

Отвечает: Lexus
Здравствуйте, Serhik_z!

Я считаю, что ошибка у вас в строке:
"DeleteFile(f, 'C:Program Filescall est.exe');"
Здесь функция DeleteFile вызвана с неверными аргументами.
Я вообще не понимаю ее назначения: ведь вы выполняете удаление файла вызовом своей процедуры DeleteF(filename).

Мое предложение: исправить обработчик OnCreate:

procedure TForm1.FormCreate(Sender: TObject);
begin
DeleteF('C:Program Filescall est.exe');
end;

Еще могу предложить упростить саму процедуру удаления. По-моему будет достаточно:

procedure TForm1.DeleteF(const FileName: string);
begin
if fileexists(filename) then
if not(deletefile(pchar(filename))) then showmessage('Удаление невозможно');
end;
Ответ отправил: Lexus (статус: 1-ый класс)
Отправлен: 07.01.2006, 14:35


Вопрос № 32.822
Здравствуйте!
Не подскажите как послать нажатие правой клавиши мыши другому окну. И возможно ли это сделать при условии что оно(другое окно) будет неактивным?
Отправлен: 07.01.2006, 12:16
Вопрос задал: Yxo (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Minor
Здравствуйте, Yxo!
попробуйте вот так:
Windows.SendMessage(Handle,WM_RBUTTONDOWN,MK_RBUTTON,$00050015);
где
Handle вы берете у окна, на которое собираетесь нажать,
например так: Handle:=FindWindow(nil,'Имя окна');
$00050015 - координаты точки на окне в шестнадцетеричной! системе исчисления
(первые 4 цифры - y, вторые 4 цифры - х)
в данном случае это точка (21,5)
Другое окно не обязательно должно быть активным - сам проверил!!! Удачи ;)
---------
Не руби сук, на котором сидишь! Вообще слезь с дерева, человек!
Ответ отправил: Minor (статус: 1-ый класс)
Отправлен: 07.01.2006, 16:12
Оценка за ответ: 5


Вопрос № 32.839
Здравствуйте,уважаемые эксперты. Я только начинаю изучать делфию
У меня такой вопрос. Как Вводить текст в Edit из переменной и как вводить.
Отправлен: 07.01.2006, 19:54
Вопрос задал: Ua4aqc (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Romodos
Здравствуйте, Ua4aqc!
у Edit есть свойство Text типа string (строка)
Вы можете присваивать ему значения
Пример работы в приложении
Вы можете делать это при нажатии на кнопку
или при событии Edit OnChange
Надеюсь, помог вам.

Приложение:

---------
FAQ me off!

Ответ отправил: Romodos (статус: Практикант)
Отправлен: 07.01.2006, 20:14

Отвечает: Ерёмин Андрей
Здравствуйте, Ua4aqc!
Вот так присваивать переменной значение из TEdit:
Var S: String; X: Integer; Z: Real;
...
S:=Edit1.Text;
X:=StrToInt(Edit1.Text);
Z:=StrToFloat(Edit1.Text);

А вот так помещать текст в TEdit из переменных:
Var S: String; X: Integer; Z: Real;
...
Edit1.Text:=S;
Edit1.Text:=IntToStr(X);
Edit1.Text:=FloatToStr(Z);

---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 07.01.2006, 22:05

Отвечает: Diman_A
Здравствуйте, Ua4aqc!
У компонента Edit есть свойство Text, которое позволяет делат с текстом в Edit что хочешь (тип String). Например:
Передать текст Edit-у: form1.edit1.text:=str;
Получить текст из Edit-а: str:=form1.edit1.text;
Если тебе нужно показать в Edit значения переменных целого типа (integer, longint), то нужно их преобразовать в String: astr:=inttostr(a); Если получить из string в целый тип - a:=strtoint(astr);
Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 08.01.2006, 07:12

Отвечает: Schmak
Здравствуйте, Ua4aqc!
Edit имеет свойтво text типа string, в котором хранится строка введённая (отображаемая) в Edite. С этим свойством можно производить все (ну или почти все), что и с обычными строками. Для того чтобы изменить текст надо просто присвоить новое значение: Edit1.Text:='Новое значение'. Для того чтобы получить введённый текст надо просто взять значение свойства Text: s:=Edit1.Text, s:string(строка).
---------
Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Практикант)
Отправлен: 08.01.2006, 10:43
Оценка за ответ: 5

Отвечает: Lexus
Здравствуйте, Ua4aqc!

У Edit есть свойство .text - текстового типа (string)
Следовательно ваша задача решается так (см.приложение)

Приложение:

Ответ отправил: Lexus (статус: 1-ый класс)
Отправлен: 08.01.2006, 13:29


Вопрос № 32.844
Как вставить в программу собственный курсор?
Отправлен: 07.01.2006, 21:26
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Sassoft!
Во-первых, необходимо получит handle курсора, а затем определить его в массиве курсоров компонента TScreen. Индексы предопределенных курсоров системы отрицательны, а пользователь может определить курсор, индекс которого положителен.

procedure TForm1.Button1Click(Sender: TObject);
var
h : THandle;
begin
h := LoadImage(0, 'C:TheWallMagic.ani', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or
LR_LOADFROMFILE);
if h = 0 then
ShowMessage('Cursor not loaded')
else
begin
Screen.Cursors[1] := h;
Form1.Cursor := 1;
end;
end;


---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 07.01.2006, 22:18

Отвечает: REFERI
Здравствуйте, Sassoft!
Смотрите на DelphiWorld - там полно различных и понятных! примеров. Если вы не пользуетесь DelphiWorld, тогда срочно качайте это дело http://delphiworld.narod.ru/
не пожалеете.
Удачи!
---------
Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Студент)
Отправлен: 08.01.2006, 02:21

Отвечает: Diman_A
Здравствуйте, Sassoft!
Это смотря как вставлять. Можно заменить стандартный. Можно сделать свой. Курсор можно хранить на диске, можно в ресурсах. Постараюсь описать тебе все.
1) создание переменной для своего курсора и загрузка его из ресурсов.
const
crMyCursor = 5;
{$r cursor.res}
procedure TForm1.FormCreate(Sender: TObject);
begin
Screen.Cursors[crMyCursor] := LoadCursor(HInstance, 'mycursor');
Cursor := crMyCursor;
end;
{под именем mycursor в res-файле должен храниться файл курсора}
2) замена стандартного курсора с загрузкой с диска.
procedure TForm1.FormCreate(Sender: TObject);
var h: THandle;
begin
h := LoadImage(0, 'cursor.cur', IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);
Screen.Cursors[crSizeAll] := h; { замена crsizeall своим курсором т.е. у формы св-во cursor должно быть поставлено в crsizeall}
end;
Примечание: в нормальной ситуации необходимо удалить любые ресурсы курсоров с помощью DeleteCursor, тем не менее, в Delphi в этом нет необходимости, поскольку Delphi сама удаляет все курсоры из массива Cursors.
Ответ отправил: Diman_A (статус: 3-ий класс)
Отправлен: 08.01.2006, 07:11

Отвечает: Lexus
Здравствуйте, Sassoft!

В каждом проекте Delphi определяет глобальный объект с именем Screen (тип TScreen), который, между прочим, определяет массив курсоров, называемый Cursors. Когда вы щелкаете на свойстве Cursor в Инспекторе объектов, выпадающий список и есть список элементов указанного массива.

Для предустановленных курсоров Delphi использует элементы массива с индексами начиная с -1 и ниже (т.е. только отрицательные числа), поэтому собственные курсоры вы можете размещать с порядковым номером, начинающимся с нуля и выше.

Решение в приложении.

Приложение:

Ответ отправил: Lexus (статус: 1-ый класс)
Отправлен: 08.01.2006, 14:36


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

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

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

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

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


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


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

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное