Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 14:31   #1
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию Компонент плейлист, есть проблемы.

Здравствуйте!

У меня проблема с компонентов TPLSBox, мой компонент который я пишу для своего плеера ZuByMP.

что мне нужно?
1. создать record и туда вписывать уже полученные значения
например.

type
TTagInfo = record
tag, filename, time;
создание у меня получается, но вот вписывать туда свои значения нет.
а значения будут вписыватся так.

Пример:
PLSBox1.(тут объявленный record TTagInfo).tag := ' название трека ';
PLSBox1.(тут объявленный record TTagInfo).Filename := 'c:\...mp3';
PLSBox1.(тут объявленный record TTagInfo).time := '00:50';

2. нужно обявить это в property, и соответсвенно чтобы это всё держало в себе введенные значения.

3. сложность в том чтобы эти данные добавлялись как TStrings, т.е. была возможность узнать ItemIndex, Count.

для чего это нужно!

1. сейчас многие пишут плееры и проблема в основном у многих бывает с компонентом TListBox, т.к. он виснет при отрисовке если несет в себе много информации.

2. при помощи этого record'а будет рисоватся введенные данные при первой отрисовке в самом компоненте, тем самым повысим скорость обработки данных.

также уже есть градиентовая заливка выделенного Item, и добавлено
Fixed (тоже градиентовая) Item т.е. тот файл который щас играет(ставим сами, и еще чтобы сделать Fixed не видемым значение -2, а не -1).

P.S. Зарание Всем спасибо!
Вложения
Тип файла: rar PLSBox.rar (2.5 Кб, 28 просмотров)
ZuBy вне форума Ответить с цитированием
Старый 20.08.2009, 14:32   #2
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Только прошу не давать ссылки на сторонние компоненты.
ZuBy вне форума Ответить с цитированием
Старый 20.08.2009, 15:20   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Если Вам нужен аналог TStirngs, то можно попробовать вот так:


Код:
const
  MaxListSize = Maxint div 16; // Тут можно свою длину

type
  PTagItem = ^TTagItem
  TTagItem = record
    tag: String, 
    filename: String, 
    time: Integer;
  end;

  PTagItemList = ^TTagItemList;
  TTagItemList = array [0..MaxListSize] of TTagItem;

  TTagList = class
  private
    FList: PTagItemList;
    FCount: Integer;
  public
    procedure Add((* Тут свои параметры *));
    procedure Delete(Index: Integer);
    constructor Create;
    destructor Destroy; 
    ...
    property TagList: PTagItemList read FList;
  end;
И дальше в том же духе.
psycho-coder вне форума Ответить с цитированием
Старый 20.08.2009, 15:27   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Спасибо psycho-coder
я еще не проверял, но как можно будет узнать ItemIndex и Count?

Код:
const
  MaxListSize = Maxint div 16; // Тут можно свою длину
это для длинны строки?
ZuBy вне форума Ответить с цитированием
Старый 20.08.2009, 15:39   #5
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от ZuBy Посмотреть сообщение
Спасибо psycho-coder
я еще не проверял, но как можно будет узнать ItemIndex и Count?
ItemIndex - Реализовывать свои методы. Надо еще в сорцах TListBox поковыряться
Count - при добавлении делать Inc(FCount); И при удалении соответственно Dec(FCount)
Код:
type
  TTagList = class
  private
    FCount: Integer;
  public
    property Count: Integer read FCount;
В коде есть FCount
Цитата:
Сообщение от ZuBy Посмотреть сообщение
Код:
const
  MaxListSize = Maxint div 16; // Тут можно свою длину
это для длинны строки?
Это длина массива списка -> длина списка плейлиста
Цитата:
Код:
PTagItemList = ^TTagItemList;
  TTagItemList = array [0..MaxListSize] of TTagItem;
Например для плеера максимум можно загрузить 30000 треков, тогда MaxListSize = 30000;
Если будете подключать Classes, то название измените на (например) MaxTags.
Просто там такая же константа есть.
psycho-coder вне форума Ответить с цитированием
Старый 20.08.2009, 15:45   #6
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

еще раз спасибо за разеснение, вот есть еще вопрос
а если Count узнавать при отлове сообщении LB_ADDStr...
и выполнять inc(fCount), тоже самое и с удалением LB_Del....

будет ли правильно это всё дело работать?
ZuBy вне форума Ответить с цитированием
Старый 20.08.2009, 16:05   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а почему бы не использовать св-во Object у TStringList'а?
(можно сделать своего наследника от этого класса чтоб с указателями не мучатся)
ведь я так понимаю его св-во Items:array of string пригодится?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 16:06   #8
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Конечно
Вот пример реализации TStringList'a
Код:
procedure TStringList.InsertItem(Index: Integer; const S: string; AObject: TObject);
begin
  Changing;
  if FCount = FCapacity then Grow;
  if Index < FCount then
    System.Move(FList^[Index], FList^[Index + 1],
      (FCount - Index) * SizeOf(TStringItem));
  with FList^[Index] do
  begin
    Pointer(FString) := nil;
    FObject := AObject;
    FString := S;
  end;
  Inc(FCount);
  Changed;
end;

А вот методы ItemIndex
Код:
  TCustomListControl = class(TWinControl)
  protected
    ...
    function GetItemIndex: Integer; virtual; abstract;
    procedure SetItemIndex(const Value: Integer); overload; virtual; abstract;
...
    property ItemIndex: Integer read GetItemIndex write SetItemIndex;
  end;
Как отсюда видно, они абстрактные и требуют перекрытия:
Код:
function TCustomListBox.GetItemIndex: Integer;
begin
  if MultiSelect then
    Result := SendMessage(Handle, LB_GETCARETINDEX, 0, 0)
  else
    Result := SendMessage(Handle, LB_GETCURSEL, 0, 0);
end;

procedure TCustomListBox.SetItemIndex(const Value: Integer);
begin
  if GetItemIndex <> Value then
    if MultiSelect then SendMessage(Handle, LB_SETCARETINDEX, Value, 0)
    else SendMessage(Handle, LB_SETCURSEL, Value, 0);
end;
Вот, с этим и нужно разбираться.
psycho-coder вне форума Ответить с цитированием
Старый 20.08.2009, 16:07   #9
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а почему бы не использовать св-во Object у TStringList'а?
(можно сделать своего наследника от этого класса чтоб с указателями не мучатся)
ведь я так понимаю его св-во Items:array of string пригодится?
Можно и так. Я об этом думал, но до ТС не довел почему то...
psycho-coder вне форума Ответить с цитированием
Старый 20.08.2009, 16:26   #10
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

а если схитрить оставить стандарное Fitems: TStrings, объявить как положено, как в ListBox и тем самым ты и оставим ItemIndex и Count и переписать record убрать FileName.

а еще вопросик.
а как данные будут в Add записыватся.
как я думаю там нужен Assign, но вот как эту процедуру создать?

P.S. Извините меня, просто у меня щас Delphi под рукой нет и мне пока не всё ясно.
ZuBy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарик для ввода дат и счетчик номеров -- есть проблемы gleod Microsoft Office Excel 17 17.07.2009 16:02
Есть ли такой компонент? artemavd Компоненты Delphi 6 11.05.2009 01:47
Поиск в бд Access... Есть проблемы! mindshaft Microsoft Office Access 1 13.02.2009 09:23
Добавление файлов в плейлист Dr.Badnezz Мультимедиа в Delphi 12 26.01.2009 18:06
компонент, в котором есть вкладки Fruit Компоненты Delphi 10 01.02.2008 02:16