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) Кол-во скачиваний: 866
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) Кол-во скачиваний: 870
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
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
16-02-2018 19:45
Programmer
<img src="http://desksoft.ru/images/capt/close.gif"/>
16-02-2018 18:51
Programmer
Привет, кто тут?
13-02-2018 20:58
Vlade
всем привет!! smiley
06-02-2018 06:30
konvikkor
Тут всё рэтро! это как магазин с ретро товарами smiley даже DRKB в ретро статьях smiley
03-02-2018 16:22
antonn
Коды смайлов из VK тут не работают smiley
03-02-2018 11:02
Vlade
&#128512;&#128512;&#1285 12;
30-01-2018 18:24
Vlade
Кто в чат?
30-01-2018 18:11
Vlade
На чем основан этот сайт?
22-01-2018 20:22
antonn
На ностальгии основан smiley
12-01-2018 15:14
konvikkor
Я бы рассказал на чём основан этот сайт но боюсь меня не правильно поймут. =(
Статистика
 СегодняВсего
Посетителей9101680672
Запросов34257291023116
Online
Пользователей0
Гостей93
imgimgimgimg
 
img
     00:00