img
00:00
imgФорум Delphi: Пишу плейлист. Нужна помощь!!!
imgimgimg
Форумы Delphi Пишу плейлист. Нужна помощь!!! (Всего сообщений: 28)Страницы:  01  02  03 
NITROGEN
Новичок

Профиль
1 | #2009 | цитата16-01-2010 02:37
Доброго времени суток, форумчане! Вот, поюзав плейлист Antonn'а, решил написать свой. Просто я пишу плеер и мне не хватает тех возможностей, которыми располагает Antonn'овский плейлист. У меня не получается выделение файлов мышью, получается только программно (типа SelectTrack(6)). Если знаете как это реализовать прошу помочь, очень надо! Выкладываю архив с исходником плейлиста и демо-прогой.

Информация для Antonn'а:
Название свойств, процедур, функций и пр. взял от твоего плейлиста (это же не запрещено?). Просто плеер без плейлиста не пишется и вот пока твоим пользуюсь. И чтоб легче было поменять компонент, названия процедур и т.д. одинаковые. Если сможешь, помоги решить вышеизложенную проблему...
Прикрепленные файлы:
MyPlaylist.zip - (254.61 Kb) Кол-во скачиваний: 853
antonn

Старожил

Профиль
2 | #2010 | цитата16-01-2010 09:23
Каждая строка плейлиста это record, в котором хранится заголовок, путь к файлу, длительность, и указатели на такой record хранятся в обычном Tlist. Record заполняется при добавлении строки один раз. Введя такой подход ты избавишься от лишних TStringList (которые еще нужно синхронизировать).
Примерно так выглядит он:
TPLItem = record
caption, path:string;
duration:integer; //я в секундах предпочитаю указывать, а не в Tdatetime
duration_text:string; //преобразованный текс длительности, чтобы не терять время при каждой перерисовке

select:boolean;
end;

Для мышки используется OnMouseDown и подобное. Поле Select в рекорде будет означать выделена ли строка. По OnMouseDown приходят координаты клика, не сложно прикинуть на какую строку они укажут (зная высоту строк и на сколько строк прокручен ПЛ сейчас), я ставлю поле в true, а остальным полям false и перерисовываю (при зажатом Ctrl немного другая механика).
По OnMouseMove я смотрю на сколько сдвигается курсор (начальные координаты запоминаю в OnMouseDown) и сдвигаю в ту сторону выделеную (select=true) строку.

Примерно вот так, с работы приду еще напишу smiley
NITROGEN
Новичок

Профиль
3 | #2013 | цитата17-01-2010 12:59
А как узнать координаты курсора относительно плейлиста? "Mouse.CursorPos" - это относительно экрана. В основном весь косяк не в том как строчку выбрать, а как узнать позицию мыши относительно PL.

Изменил(а) NITROGEN, 17-01-2010 13:00
antonn

Старожил

Профиль
4 | #2014 | цитата17-01-2010 21:30
ну так добавить обработчики клика:
delphi
protected
      procedure MouseMove(Shift: TShiftState;x,y:integer);override;
      procedure MouseDown(Button: TMouseButton;Shift: TShiftState;x,y:integer);override;
      procedure MouseUp(Button: TMouseButton;Shift: TShiftState;x,y:integer);override;


приходят туда уже координаты над контролом.
NITROGEN
Новичок

Профиль
5 | #2016 | цитата18-01-2010 23:48
Спасибо, Antonn за помощь. Только я туплю че-то с вычислением над каким пунктом мышь находится. А так вообще суть я понял, респект тебе! Открой мой исходник, посмотри че да как, подправь немного или так напиши (если не трудно). В архиве компонент и демка к нему.
Прикрепленные файлы:
MyPlaylist.zip - (258.12 Kb) Кол-во скачиваний: 860
antonn

Старожил

Профиль
6 | #2020 | цитата19-01-2010 12:44
самое простое узнать строку это Y разделить на высоту строки smiley
delphi
num:=y div item_height
NITROGEN
Новичок

Профиль
7 | #2022 | цитата19-01-2010 16:40
это я пробовал. это кол-во строк. Например: высота PL = 100, высота строки = 2, 100 : 2 = 50 (т.е. кол-во). Ты извини меня, я наверно достал уже smiley , но просто очень надо. а я никак не могу додуматься. в целом идея понятна, посмотри в компоненте событие OnDblClick. Или запусти демку и, добавь несколько файлов и кликни в области 2-го файла. он станент проигрываемым. Но это я применил только ко второму файлу, а как к остальным? - никак не дойдет до меня smiley помоги, я знаю это не сложно smiley
antonn

Старожил

Профиль
8 | #2023 | цитата19-01-2010 17:20
в дабл_клике этого не узнаешь, заведи переменную boolean и в OnDblClick ставь ее в true, а в OnMouseUp смотри, если эта переменная true, значит был двойной клик.
В onMouseUp приходят координаты клика внутри компонента, y div item_height покажет над какой видимой строкой был клик.
NITROGEN
Новичок

Профиль
9 | #2024 | цитата20-01-2010 10:23
все!!! огромное спасибо!!!!!! работает! smiley
NITROGEN
Новичок

Профиль
10 | #2030 | цитата23-01-2010 03:24
Antonn, подскажи как сделать так, чтобы компонент создавался не только на форме, а еще, например, на TTabSheet?. В OnCreate стоит Parent := TForm(AOWner). Пробовал ставить TWinCtrl(TTabShee smiley - не получается. Вообще убираю эту строку - нигде не создается, ни на форме, ни на табщите. В твоем плейлисте это прекрасно работает. Подскажи, в чем моя ошибка. Заранее спасибо.
Форумы Delphi Пишу плейлист. Нужна помощь!!! (Всего сообщений: 28)Страницы:  01  02  03 
Тему просматривают: 1 гостей, 0 пользователей
Ваше Имя:
 
22000/22000 [Справка по кодам]
 Защита от спамботовВведите ответ:
Пишу плейлист. Нужна помощь!!! | Ответов: 28
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
27-11-2017 09:19
konvikkor
Даёшь MS-DOS или Windows 3.1 smiley
20-11-2017 21:44
antonn
WinXP еще недостаточно олдовая, и для нее надо будет делать другой сайт. Win98 по-ностальгичней smiley
18-11-2017 20:34
Супер Илья
Сделай вид виндовс хр
16-11-2017 14:26
konvikkor
Ну главное что тут люди бывают smiley Это о многом говорит smiley Человечество ещё не вымерло!
03-11-2017 11:05
antonn
Нет тут ИИ, все на угле и дровах работает smiley
31-10-2017 12:22
konvikkor
Тут есть инфа про нейроные сети? Думаю в такой олд скульной обстановке уже ИИ работает smiley)
06-10-2017 12:38
antonn
Скорее всего нет, тут же до сих пор атмосфера 10/20-ти летней давности smiley
04-10-2017 13:08
konvikkor
есть тут инфа про TTask в делфи? Кто знает об этой новинке????
27-08-2017 03:12
pamdoff
Блэт
27-08-2017 03:12
pamdoff
•••,ну ребят,скучно,го в чат
Статистика
 СегодняВсего
Посетителей8221613455
Запросов84126284833367
Online
Пользователей0
Гостей109
imgimgimgimg
 
img
     00:00