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) Кол-во скачиваний: 1947
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) Кол-во скачиваний: 1940
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
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
03-03-2024 16:34
ПаХаН
Надо чтобы этот сайт был жив
20-02-2024 06:12
memoryspeak
обалденный сайт. искал ответ на вопрос, как скриптом закрыть вкладку, и наткнулся на это чудо.
08-02-2024 20:22
stark452
Разработчику огромный респект
08-02-2024 20:21
stark452
Если ее немного допилить
и сделать все правильно
то она может стать чем то весомым
08-02-2024 20:20
stark452
Странно что эта штука не популярна
08-10-2023 02:39
Darian
smiley
just testing the smileys
08-10-2023 02:38
Darian
._. -_- >o) ;(
08-10-2023 02:37
Darian
smiley
08-10-2023 02:36
Darian
smiley smiley smiley smiley :$ :?
Emoji Test
03-09-2023 17:03
DartKane
Yes. Unfortunately, the chat is not so active here. And if someone writes here once and for half a year, this is a huge event (
Статистика
 СегодняВсего
Посетителей13074038206
Запросов3386395135822
Online
Пользователей0
Гостей122
imgimgimgimg
 
img
     00:00