| | | |
|
| Форум Delphi: Пишу плейлист. Нужна помощь!!! |
|
|
Форумы Delphi Пишу плейлист. Нужна помощь!!! (Всего сообщений: 28) | Страницы: 01 02 03 |
|
|
1 | #2009 | цитата | 16-01-2010 02:37 |
Доброго времени суток, форумчане! Вот, поюзав плейлист Antonn'а, решил написать свой. Просто я пишу плеер и мне не хватает тех возможностей, которыми располагает Antonn'овский плейлист. У меня не получается выделение файлов мышью, получается только программно (типа SelectTrack(6)). Если знаете как это реализовать прошу помочь, очень надо! Выкладываю архив с исходником плейлиста и демо-прогой.
Информация для Antonn'а:
Название свойств, процедур, функций и пр. взял от твоего плейлиста (это же не запрещено?). Просто плеер без плейлиста не пишется и вот пока твоим пользуюсь. И чтоб легче было поменять компонент, названия процедур и т.д. одинаковые. Если сможешь, помоги решить вышеизложенную проблему... |
|
Прикрепленные файлы: |
| MyPlaylist.zip - (254.61 Kb) Кол-во скачиваний: 2104 |
|
| |
|
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) строку.
Примерно вот так, с работы приду еще напишу |
|
| |
|
3 | #2013 | цитата | 17-01-2010 12:59 |
А как узнать координаты курсора относительно плейлиста? "Mouse.CursorPos" - это относительно экрана. В основном весь косяк не в том как строчку выбрать, а как узнать позицию мыши относительно PL.
Изменил(а) NITROGEN, 17-01-2010 13:00 |
|
| |
|
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; |
приходят туда уже координаты над контролом. |
|
| |
|
5 | #2016 | цитата | 18-01-2010 23:48 |
Спасибо, Antonn за помощь. Только я туплю че-то с вычислением над каким пунктом мышь находится. А так вообще суть я понял, респект тебе! Открой мой исходник, посмотри че да как, подправь немного или так напиши (если не трудно). В архиве компонент и демка к нему. |
|
Прикрепленные файлы: |
| MyPlaylist.zip - (258.12 Kb) Кол-во скачиваний: 2110 |
|
| |
|
6 | #2020 | цитата | 19-01-2010 12:44 |
самое простое узнать строку это Y разделить на высоту строки delphi | num:=y div item_height |
|
|
| |
|
7 | #2022 | цитата | 19-01-2010 16:40 |
это я пробовал. это кол-во строк. Например: высота PL = 100, высота строки = 2, 100 : 2 = 50 (т.е. кол-во). Ты извини меня, я наверно достал уже , но просто очень надо. а я никак не могу додуматься. в целом идея понятна, посмотри в компоненте событие OnDblClick. Или запусти демку и, добавь несколько файлов и кликни в области 2-го файла. он станент проигрываемым. Но это я применил только ко второму файлу, а как к остальным? - никак не дойдет до меня помоги, я знаю это не сложно |
|
| |
|
8 | #2023 | цитата | 19-01-2010 17:20 |
в дабл_клике этого не узнаешь, заведи переменную boolean и в OnDblClick ставь ее в true, а в OnMouseUp смотри, если эта переменная true, значит был двойной клик.
В onMouseUp приходят координаты клика внутри компонента, y div item_height покажет над какой видимой строкой был клик. |
|
| |
|
9 | #2024 | цитата | 20-01-2010 10:23 |
все!!! огромное спасибо!!!!!! работает! |
|
| |
|
10 | #2030 | цитата | 23-01-2010 03:24 |
Antonn, подскажи как сделать так, чтобы компонент создавался не только на форме, а еще, например, на TTabSheet?. В OnCreate стоит Parent := TForm(AOWner). Пробовал ставить TWinCtrl(TTabShee - не получается. Вообще убираю эту строку - нигде не создается, ни на форме, ни на табщите. В твоем плейлисте это прекрасно работает. Подскажи, в чем моя ошибка. Заранее спасибо. |
|
| |
Форумы Delphi Пишу плейлист. Нужна помощь!!! (Всего сообщений: 28) | Страницы: 01 02 03 |
| Тему просматривают: 1 гостей, 0 пользователей |
|
| Пишу плейлист. Нужна помощь!!! | Ответов: 28 |
|
|
|
|
Мини-чат :) |
|
|
Статистика |
| Сегодня | Всего |
Посетителей | 3349 | 5511057 |
Запросов | 11260 | 410880463 |
Online |
Пользователей | 0 |
Гостей | 100 |
|
|
|