Помогите решить проблему с ListView и TrackBar
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Показано с 1 по 2 из 2
  1. #1
    Гость форума

    Регистрация
    06.11.2009
    Сообщений
    7
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    Question Помогите решить проблему с ListView и TrackBar

    Вопрос: № 1
    Я пишу программу будильник, в ней есть такая функция, как воспроизвести музыкальный файл, который тебя и будет утром будить, кнопка такая нажимаешь и прослушиваешь, что ты за песню выбрал. Я нажимаю воспроизвести (кнопка Play), появляется ползунок/бегунок (TrackBar1.Visible := True; ) Запускается таймер с интервалом 1000 миллисекунд, он и меняет положение ползунка каждую секунду и если песня кончилась, то присваивает кнопке плэй, вид и тэг, что она типа уже не плэй, а стоп, меняет положение ползунка на начало и сам себя (таймер) выключает. Теперь сам вопрос, как сделать, чтобы ползунок показывал сколько песни проиграло, сколько осталось. Проще говоря, как получить сколько длиться песня? Как я понимаю когда получу миллисекунды (продолжительность трэка), то мне надо сделать так: (TrackBar1.Max := «Те самые миллисекунды»; ) Воспроизводит звук TMediaPlayer . Да и вообще посоветуйте как это лучше реализовать, если я не правильно придумал?

    Вопрос: №2
    Я пишу будильник, но уже приличный, там будут напоминания дней рождений, простые напоминания и сами будильники. На форме SettingForm есть ListView, нажимаю кнопку «Новый» (будильник), появляется форма, настраиваю, жму «ОК» и будильник добавляется в список «ListView» Будильник это объект: TClock = class(TObject). Мне надо как то привязать будильник к конкретной строке списка, чтобы когда я выделял в списке нужный будильник и нажимал «Изменить» то он передавал свои параметры той форме про которую я говорил выше. Как передавать я знаю, как привязывать объект и потом его получать не могу понять, объясните кто нибудь пожалуйста. Вот код нажатия на кнопку «Новый», я походу не правильно добавляю объект. Если правильно то как его вызывать?

    Код:
    procedure TForm1.BtnNewClockClick(Sender: TObject);
    var Alarm : TClock;
    begin
      FormNewClock := TFormNewClock.Create(self);
      FormNewClock.ReserveVolume := FormNewClock.GetVolume; //зарезервировать текущую громкость звука
     try
      if FormNewClock.ShowModal = mrOK then //если в FormNewClock нажали "ОК" то выполняется код
      begin
        Alarm := TClock.Create;
        FormNewClock.SetData(Alarm); //получить настройки будильника из формы FormNewClock
    
    if (Alarm.FMode = ONE_ALARM) then
    begin
        with ListViewAlarm.Items.Add do
        begin
          Caption := Alarm.FTextMessage;
          SubItems.Add(DateToStr(FormNewClock.DatePicker.Date));
          SubItems.Add(TimeToStr(FormNewClock.TimePicker.Time));
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          Checked := True;
        end;
    end;
    
    if (Alarm.FMode = EVERY_DAY) then
    begin
        with ListViewAlarm.Items.Add do
        begin
          Caption := Alarm.FTextMessage;
          DecodeTime(FormNewClock.TimePicker.Time, Alarm.FHour, Alarm.FMin, Alarm.FSec, Alarm.FMilSec);
          if (Alarm.FHour >= HourOf(Now)) and (Alarm.FMin > MinuteOf(Now))
          then SubItems.Add('сегодня ')
          else SubItems.Add('завтра ');
          SubItems.Add(TimeToStr(FormNewClock.TimePicker.Time));
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          SubItems.AddObject('Будильник', Alarm);
          Checked := True;
        end;
    end;
    
    if (Alarm.FMode = EVERY_WEEK) then
    begin
    
        with ListViewAlarm.Items.Add do
        begin
          Caption := Alarm.FTextMessage;
          SubItems.Add(IntDayWeekToStr(Alarm.FDayOfWeek));
          SubItems.Add(TimeToStr(FormNewClock.TimePicker.Time));
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          SubItems.AddObject('Будильник', Alarm);
          Checked := True;
        end;
    end;
    
    if (Alarm.FMode = EVERY_HOUR) then
    begin
        with ListViewAlarm.Items.Add do
        begin
          Caption := Alarm.FTextMessage;
          DecodeTime(FormNewClock.TimePicker.Time, Alarm.FHour, Alarm.FMin, Alarm.FSec, Alarm.FMilSec);
          SubItems.Add('ежедневно ');
          SubItems.Add(IntToStr(Alarm.FMin)+' мин');
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          SubItems.AddObject('Будильник', Alarm);
          Checked := True;
        end;
    end;
    
    if (Alarm.FMode = EVERY_MONTH) then
    begin
        with ListViewAlarm.Items.Add do
        begin
          Caption := Alarm.FTextMessage;
          SubItems.Add((FormNewClock.EditEveryYear.Text)+'-го числа');
          SubItems.Add(TimeToStr(FormNewClock.TimePicker.Time));
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          SubItems.AddObject('Будильник', Alarm);
          Checked := True;
        end;
    end;
    
    if (Alarm.FMode = EVERY_YEAR) then
    begin
        with ListViewAlarm.Items.Add do
        begin
          Caption := Alarm.FTextMessage;
          SubItems.Add((FormNewClock.EditEveryYear.Text)+'-го '+IntMonthToStr(Alarm.FMonth));
          SubItems.Add(TimeToStr(FormNewClock.TimePicker.Time));
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          SubItems.AddObject('Будильник', Alarm);
          Checked := True;
        end;
    end;
    
      end; //чтобы в дальнейшем их сохранить и добавить запись в ListView
     finally
       FormNewClock.Free;
       waveOutSetVolume(WAVE_MAPPER, FormNewClock.ReserveVolume); //востановить громкость из резерва
     end;
    end;
    Последний раз редактировалось -=C@$PeR=-; 06.11.2009 в 22:29.

  2. #2
    Гость форума

    Регистрация
    06.11.2009
    Сообщений
    7
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях

    Exclamation

    Вот решение, на другом форуме подсказали, мож кому пригодиться:

    Говоря соразмерные, Phodopus имел в виду, что тип свойства Data является указателем - по сути числом, размерность которого зависит от того, под какую платформу собрано приложение: 32 или 64 бит. (Говоря о делфи имеем 32 бит). Соответственно этому полю мы можем путем приведения типов присвоить любое значение типа размером до 32х бит.
    В твоем случае, ссылка на объект класса TClock также является указателем. Поэтому ее можно смело присвоить свойству Data:
    Код:
    with ListViewAlarm.Items.Add do
    begin
    //...
    Data := Pointer(Alarm);
    //...
    end;

    // и наоборот

    //...
    Alarm := TClock(ListItem.Data);
    //...
    Код с моей программы:

    Код:
    procedure TForm1.BtnChancgeClockClick(Sender: TObject);
    var
        Alarm : TClock;
        SavedIndex : integer;
    begin
        FormNewClock := TFormNewClock.Create(self);
        FormNewClock.ReserveVolume := FormNewClock.GetVolume;
        try
        with ListViewAlarm do Alarm := TClock(ListViewAlarm.Items.Item[ItemIndex].Data);
          FormNewClock.GetData(Alarm);
          if FormNewClock.ShowModal = mrOK then
          begin
            FormNewClock.SetData(Alarm); //получить настройки будильника из формы FormNewClock
            with ListViewAlarm do
            begin
              SavedIndex := ItemIndex;
    
    if (Alarm.FMode = ONE_ALARM) then
    begin
        ListViewAlarm.Items.Item[ItemIndex].SubItems.Clear; //Очищаем строку
        with ListViewAlarm.Items.Item[ItemIndex] do
    
        begin
          Caption := Alarm.FTextMessage;
          SubItems.Add(DateToStr(FormNewClock.DatePicker.Date));
          SubItems.Add(TimeToStr(FormNewClock.TimePicker.Time));
          SubItems.Add(Alarm.FPeriodAlarm);//добавляется периодичность срабатывания
          Checked := True;
        end;
    
    end;

Похожие темы

  1. Помогите решить проблему с монитором.
    от yrgen в разделе Железо (hardware)
    Ответов: 1
    Последнее сообщение: 12.10.2009, 17:10
  2. Как решить трабл
    от Apakc в разделе Microsoft Windows
    Ответов: 5
    Последнее сообщение: 03.02.2009, 08:52
  3. помогите решить проблемы с вистой
    от HECTOR в разделе Microsoft Windows
    Ответов: 2
    Последнее сообщение: 20.11.2008, 21:16
  4. помогите выловить проблему!
    от emoxam в разделе Общие вопросы
    Ответов: 3
    Последнее сообщение: 28.11.2007, 09:30
  5. Как заменить ListBox на ListView
    от GLXV в разделе Прикладное программирование
    Ответов: 0
    Последнее сообщение: 07.06.2007, 09:01

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •