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

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


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

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

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

Выпуск № 345
от 04.01.2006, 22:24

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


Вопрос № 32409: На панели кнопки квадратные 1-15 штук Каждая в свойстве Caption имеет номера от1 до 15 Есть свободное место в размер кнопки Как перемещать кнопки,мышкой, при запущеном приложении ...
Вопрос № 32430: Здравствуйте! У меня такой вопросик: я создаю в dll форму. Как мне открыть эту форму из своего exe приложения? P.S. Можно ли получить из dll не только функцию или процедуру, но и константу, значение переменной??...
Вопрос № 32432: Здравствуйте, уважаемые эксперты! Проблема: где мне достать ХОРОШУЮ программу, которая создаёт файл справки *.hlp? (У меня была какая-то, но она создавала практически пустой фаил с весом 10 метров)....
Вопрос № 32435: Здравствуйте! У меня вопрос по TMediaPlayer. Как с помощью TTarckBar(или ещё чего-нибудь) отображать и менять позицию песни....
Вопрос № 32451: Здравствуйте! Опять вопрос по TMediaPlayer, я понял как отображать и менять позицию песни, но как это сделать в одном TTrackBar'е??? Пожалуйста, поподробней....
Вопрос № 32454: Доброго времени суток господа Эксперты!!! Поздравляю всех вас с Новым 2006 годом. Желаю вам всего самого лучшего, пусть сбудутся все ваши мечты!!! У меня к вам вопрос как средствами делфи можно сделать список файлов находящихся в оп...
Вопрос № 32457: TMediaPlayer: 1.Как создать что-нибуть на подобии плейлиста? 2.Как мона регулировать громкость воспроизводимого трека? 3.Создаю на форме TPanel ставлю TMediaPlayer.Display := Panel1, но при запуски фильма на TPanel видна только часть филь...

Вопрос № 32.409
На панели кнопки квадратные 1-15 штук
Каждая в свойстве Caption имеет номера от1 до 15
Есть свободное место в размер кнопки
Как перемещать кнопки,мышкой, при запущеном приложении
Отправлен: 29.12.2005, 22:40
Вопрос задал: Вячеслав Петрович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Ерёмин Андрей
Здравствуйте, Вячеслав Петрович!
Насколько я понял, вы хотите, чтобы каждую кнопку можно было двигать... В этом случае не нужно писать один и тот же код много раз. Вот вам практическое решение от меня по данному вопросу :)
Выделяете все кнопки (1-15 или сколько их там), переходите на закладку Events в Object Inspector и активируете событие OnMouseDown, которое приводите к виду:

procedure TForm1.Button4MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DRAGMOVE = $F012;
begin
ReleaseCapture;
(Sender as TButton).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;


После этого кнопки можно "таскать".
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 29.12.2005, 22:55
Оценка за ответ: 4
Комментарий оценки:
Кнопки тоскаются, всё класно.
Не плохо бы каментариев чуть-чуть.

Андрей, а как сделать чтоб кнопки не наезжали друг на друга.

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Вячеслав Петрович!
Мое виденье вашего вопроса:
Ввести в программе режим редактирования положения кнопок...
При активном режиме в событии OnMouseDown установить флаг что кнопка перешла в режим перемещения, в OnMouseMove - делать собственно перемещение кнопки, отслеживая координаты курсора, в OnMouseUp - сбросить флаг перемещения кнопки.

Успехов!
Ответ отправил: Лучников Юрий Владимирович (статус: 8-ой класс)
Отправлен: 30.12.2005, 08:22
Оценка за ответ: 3
Комментарий оценки:
А как установить и сбросить флаги?
Пальцем покажите.

Отвечает: Toxic~Fire
Здравствуйте, Вячеслав Петрович!
Что-то вы выражаетесь как-то не понятно:
Но как я понял, вы пишете игру "пятнашки" - в интернете очень много алгоритмов содания этой игры!
А про перетаскивание кнопки во время работы см. приложение:

Приложение:

Ответ отправил: Toxic~Fire (статус: 2-ой класс)
Отправлен: 30.12.2005, 12:37
Оценка за ответ: 5
Комментарий оценки:
С новым годом!


Вопрос № 32.430
Здравствуйте!
У меня такой вопросик: я создаю в dll форму. Как мне открыть эту форму из своего exe приложения?
P.S. Можно ли получить из dll не только функцию или процедуру, но и константу, значение переменной??
Отправлен: 30.12.2005, 11:29
Вопрос задал: Toxic~Fire (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Toxic~Fire!
Константу или переменную лучше обернуть функцией, которая и будет их возвращать. В свою очередь такую функцию нужно эскпортировать вместе с остальными, используемыми из-вне.
Ответ отправил: Лучников Юрий Владимирович (статус: 8-ой класс)
Отправлен: 30.12.2005, 16:04

Отвечает: Diman_A
Здравствуйте, Toxic~Fire!
У меня получилось сделать только модальный показ формы, т.е. когда форма из DLL запущена, главная бездействует.
Если у вас собрать все не получится, пишите мне, вышлю исходники на delphi 6: aganovdiman@mail.ru.
Текст DLL:
library DLLWithForm;
uses
SysUtils,
Classes,
DLLFormU in 'E:!проекты!RusFaqформа из DLL (ответ №4)DLLFormU.pas' {DLLForm};

exports
ShowModalForm, FreeForm;
begin
end.
Текст формы в DLL:
unit DLLFormU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Buttons;
type
Tdllform = class(TForm)
BitBtn2: TBitBtn;
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
CallForm: THandle; //Дескриптор вызывающей формы
end;
// Объявление экспортируемых подпрограмм
function ShowModalForm: Integer;
procedure FreeForm; overload;
var
DLLForm: TDLLForm;
implementation
{$R *.DFM}
// Модальный вызов
function ShowModalForm: Integer;
begin
DllForm := TDllForm.Create(Application);
DLLForm.Show;
DLLForm.Free;
end;
// Уничтожение формы
procedure FreeForm;
begin
DLLForm.Free
end;
procedure TDLLForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if CallForm > 0 then
SendMessage(CallForm, wm_User, 0, 0)
end;
end.
А здесь исходник программы, юзающей DLL:
unit TestMainU;
interface
uses
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls;
type
Tform1 = class(TForm)
Button2: TButton; // Закрыть окно
label1: TLabel;
procedure Button2Click(Sender: TObject);
end;
var
form1: Tform1;
implementation
{$R *.DFM}
function ShowModalForm: Integer;
external 'c:DLLWithForm.dll'; // поменяйте на путь к этой DLL на вашем жестком диске
procedure FreeForm;
external 'c:DLLWithForm.dll'; // поменяйте на путь к этой DLL на вашем жестком диске
// Модальный вызов
procedure Tform1.Button2Click(Sender: TObject);
begin
Button2.Enabled := False;
label1.Caption := 'ModalResult = ' + IntToStr(ShowModalForm);
label1.Show; // Показываем результат вызова
Button2.Enabled := True;
end;
end.
Ответ отправил: Diman_A (статус: 2-ой класс)
Отправлен: 30.12.2005, 17:47


Вопрос № 32.432
Здравствуйте, уважаемые эксперты!
Проблема: где мне достать ХОРОШУЮ программу, которая создаёт файл справки *.hlp? (У меня была какая-то, но она создавала практически пустой фаил с весом 10 метров).
Отправлен: 30.12.2005, 12:41
Вопрос задал: Toxic~Fire (статус: 2-ой класс)
Всего ответов: 6
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Kazakh
Здравствуйте, Toxic~Fire!
Я пользуюсь "Help Development Studio". Классная вещь. В дистрах 780 кбайт.
Могу выслать, но у меня не самая последняя версия.
Скинь мне на мыло sikosha@inbox.ru если надо.
Ответ отправил: Kazakh (статус: 2-ой класс)
Отправлен: 30.12.2005, 12:57

Отвечает: Ерёмин Андрей
Здравствуйте, Toxic~Fire!
Рекомендую вам создавать справку не в формате hlp, а в формате chm. Это вариант более продвинутый и удобный. Для этого воспользуйтесь программой htm2chm (http://yarix.by.ru). Программа удобна в обращении, а в файлах chm используется сжатие, поэтому они имеют маленький объём. В файле chm размером 150 Кб можно уместить большое количество справки. При этом в chm можно помещать картинки и другие файлы.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 30.12.2005, 13:51

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Toxic~Fire!
Советую зайти на мой любимый, очень хороший каталог софта - softodrom.ru.
Там ты без труда найдешь себе все что душа пожелает;)

Успехов!
Ответ отправил: Лучников Юрий Владимирович (статус: 8-ой класс)
Отправлен: 30.12.2005, 16:01

Отвечает: Diman_A
Здравствуйте, Toxic~Fire!
Формат *.hlp - довольно старый. В новых виндах файлы помощи - в формате *.chm, юзеру им пользоваться гораздо удобнее. Я для их компиляции изпользую программу Page2CHM 2.3. Скачать ее можно на http://issoft.net.ru/downloads/p2c_installer.zip.
Ответ отправил: Diman_A (статус: 2-ой класс)
Отправлен: 30.12.2005, 16:53

Отвечает: [TiER]
Здравствуйте, Toxic~Fire!
Help & Manual 4 и выше!
Ответ отправил: [TiER] (статус: 1-ый класс)
Отправлен: 30.12.2005, 18:49

Отвечает: Denisss
Здравствуйте, Toxic~Fire!
Для этого можно воспользоваться программой Help&Manual.
Но вообще-то я бы рекомендовал отбросить этот устаревший формат справки и воспользоваться более удобным и компактным форматом справки CHM. Его можно создать либо с помощью той же H&M, либо с помощью Вашего любимого редактора HTML (если таковой имеется) + HTMLHelp или HTM2CHM
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 30.12.2005, 19:29


Вопрос № 32.435
Здравствуйте!
У меня вопрос по TMediaPlayer.
Как с помощью TTarckBar(или ещё чего-нибудь) отображать и менять позицию песни.
Отправлен: 30.12.2005, 14:23
Вопрос задал: Клёмин Сергей (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, SuperXakep!
В прикреплённом файле статья по созданию простенького мультимедиа-проигрывателя. Там есть этап - отображение позиции проигрывания в TGauge. Для этого используются свойства TMediaPlayer: Position (позиция) и Length (длина). Этим и следует воспользоваться. С отображением, думаю, всё понятно - просто заменить в коде Gauge на TrackBar. А для перехода просто присваивайте MediaPlayer.Position значение, которое выдаст TrackBar (событие OnChange).

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Работа - не волк, а произведение силы на расстояние!

Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 30.12.2005, 15:05
Оценка за ответ: 5

Отвечает: Лучников Юрий Владимирович
Здравствуйте, SuperXakep!
СВойство TTarckBar.Max установить равным длине проигрываемого трека, которе можно узнать Через свойство MediaPlayer.TrackLength.

Текущюю позицию TrackBar.Position нужно синхронизировать с позицией проигрываемого участка, которую можно определить по свойству MediaPlayer.TrackPosition.

Успехов!
Ответ отправил: Лучников Юрий Владимирович (статус: 8-ой класс)
Отправлен: 30.12.2005, 16:00
Оценка за ответ: 5


Вопрос № 32.451
Здравствуйте!
Опять вопрос по TMediaPlayer, я понял как отображать и менять позицию песни, но как это сделать в одном TTrackBar'е??? Пожалуйста, поподробней.
Отправлен: 30.12.2005, 20:09
Вопрос задал: Клёмин Сергей (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, SuperXakep!
Странный всё-таки этот компонент, TTrackBar... Много пробовал, но так и не получилось совместить две эти операции в один TrackBar. Но решение есть и когда-то я его видел. В данный момент не знаю как сделать. Зато могу предложить хороший пакет - MMTool (http://www.swiftsoft.de). Он включает в себя компоненты, с помощью которых легко построить мультимедиа-проигрыватель. Подобных проблем там нет. Если всё же необходимо увязать TrackBar, прошу извинить за отсутствие решения.
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 30.12.2005, 20:39
Оценка за ответ: 5
Комментарий оценки:
Всё ясно насчёт TtrackBar.
Напишите пожалуйста по внтр. почте про этот сайт, а то я English фигово знаю:)))


Вопрос № 32.454
Доброго времени суток господа Эксперты!!!

Поздравляю всех вас с Новым 2006 годом. Желаю вам всего самого лучшего, пусть сбудутся все ваши мечты!!!

У меня к вам вопрос как средствами делфи можно сделать список файлов находящихся в определенной папке и вывести его например в RichEdit.

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

Зарание благодарю!!!
Отправлен: 30.12.2005, 21:17
Вопрос задал: Ujin Antikvar (статус: 5-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Юрий Владимирович
Здравствуйте, Ujin Antikvar!

Поиск осуществляется начиная с каталога dir.
Выводит все файлы, удовлетворяющие маске mask

Приложение:

Ответ отправил: Лучников Юрий Владимирович (статус: 8-ой класс)
Отправлен: 30.12.2005, 21:27

Отвечает: Ерёмин Андрей
Здравствуйте, Ujin Antikvar!
В данном коде нужно заменить значение переменной Dir на путь к той директории, в которой следует произвести поиск (без слеша на конце). Код в приложении.

Приложение:

---------
Работа - не волк, а произведение силы на расстояние!

Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 30.12.2005, 22:20
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: Diman_A
Здравствуйте, Ujin Antikvar!
Не пойму, для чего тебе RichEdit? Для вывода всевозможных списков можно использовать ListBox или ListView, но там можно сделать несколько колонок. Я в примере использовал ListBox, но нетрудно будет переделать это для RichEdit, если тебе это действительно нужно - например, перечислять имена через запятую. На форме находятся: ListBox с именем LB, две кнопки с именами XiButton1 и XiButton2 - одна на старт, другая для удаления строк из ListBox, вдруг пригодится.
В тексте проги один блок помечен как примечание {} - это сделано, чтобы не искал файлы в поддиректориях, если тебе это нужно, уберешь фигурные скобки.

Приложение:

Ответ отправил: Diman_A (статус: 2-ой класс)
Отправлен: 31.12.2005, 06:43
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!

Отвечает: Schmak
Здравствуйте, Ujin Antikvar!
Посмотрите ответы на вопросы 31170 и 31183.
В приложении привожу мой ответ на данные вопросы. Пример приведён для Listboxa, чтобы переделать под Richedit исправьте только одну строку:
ListBox1.Items.Add(f.name); на Richedit1.lines.Add(f.name) если не ошибаюсь

Приложение:

---------
Не всё то Windows, что висит!

Ответ отправил: Schmak (статус: Студент)
Отправлен: 31.12.2005, 11:52
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!


Вопрос № 32.457
TMediaPlayer:
1.Как создать что-нибуть на подобии плейлиста?
2.Как мона регулировать громкость воспроизводимого трека?
3.Создаю на форме TPanel ставлю TMediaPlayer.Display := Panel1, но при запуски фильма на TPanel видна только часть фильма, как сделать что бы видео подстраивалось под TPanel?
4.Как сделать что бы трек(плейлист) всё время повторялся?
Отправлен: 30.12.2005, 21:25
Вопрос задал: Клёмин Сергей (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, SuperXakep!
1. А в чём именно состоит проблема? Чтобы визуализировать плейлист, используйте ListBox, а лучше - какой-нибудь ListBox, но из сторонних пакетов (JediVCL, GlobusLib), у которого можно изменять оформление.
2. Средствами TMediaPlayer этого сделать нельзя, разве что регулировать громкость всей системы, но это плохой вариант. Также см. *.
3. Насколько я помню, Panel1.AutoSize:=True; решит эту проблему и размер установится автоматически под размер видео.
4. Здесь зависит от того, как воспроизводить. Без конкретного примера показать не получится. Просто, если закончился последний трек, то надо воспроизводить первый.
* Ответом на все ваши вопросы может служить MMTool, о котором я уже говорил. Там всё это (включая плей-листы) реализовано.
** Чтобы сделать плей-лист, можно завести динамический массив (Var PL: Array of String;) и вставлять в него полные пути к файлам (SetLength(PL,1); PL[0]:='C:\music1.mp3';). Чтобы извлечь имя файла из полного пути, можно воспользоваться функцией ExtractFileName(Path); Удачи!
---------
Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 30.12.2005, 22:27

Отвечает: Лучников Юрий Владимирович
Здравствуйте, SuperXakep!
Складывается ощущение отсутствие логиеского мышления. Вы пытаетесь сделать ВСЕ по шаблону, причем даже не удосуживаетесь взгялнуть в ХЕЛП. А ведь это не лучший путь постич искусство программирования.

Компонент TMediaPlayer не доработан Борландцами, сыроват. Посему советую использовать всю мощь DirectX(для этого нужно обзавестить DirectX SDK) ;)

Успехов!
Ответ отправил: Лучников Юрий Владимирович (статус: 8-ой класс)
Отправлен: 30.12.2005, 23:41

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

1. Используйте TListBox, TListView и др. подобные компоненты.
2,3,4. Для воспроизведения аудио (позволяет использовать DSP эффекты, регулировать громкость, микшировать, использовать эквалайзер и пр.) рекомендую использовать библиотеку BASS (http://www.un4seen.com/) и можно найти компонент TBassPlayer (http://www.torry.net/quicksearchd.php?String=TBassPlayer&Title=Yes).
Для воспроизведения видео (с возможностью регулировки звука, контрастности, яркости, четкости изображения, масштаба и пр., есть возможность подключения DSP эффектов, эквалайзера и пр.) рекомендую использовать набор компонентов DSPack (http://sourceforge.net/projects/dspack).
А с помощью TMediaPlayer такого не добьешься :(
Ответ отправил: Denisss (статус: Специалист)
Отправлен: 31.12.2005, 11:04
Оценка за ответ: 5


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное