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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2013, 23:44   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию Вывод на заголовок формы позицию ползунка Ttrackbar

Здравствуйте! Как уловить нажатие и удержание левой клавиши мыши на объекте трекбар, суть вот в чем: при изменении позиции трекбара вывести текущую позицию ползунка в заголовок формы, далее проверить: перемещается ли ползунок, если нет, то показать позицию трекбара в течении секунды и убрать ее(позиЦию), а если иначе, то динамически отображать позицию трекбара на форме, ну что-то типа регулятора громкости как в аимпе

Код:
procedure Tglavnaya.TrackBar1Change(Sender: TObject);
begin
  glavnaya.Caption:='Громкость: '+IntToStr(TrackBar1.Position);
  Trackbar1.SelStart:=Trackbar1.Min;
Trackbar1.SelEnd:=Trackbar1.Position;
Sleep(30);
glavnaya.Caption:='';
end;
вот мои наработки, но меня они не устраивают, потому что позиция ползунка должна показываться в течении хотя-бы секунды
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 22.07.2013, 00:52   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

первое что пришло в голову это кинуть на форму таймер на 2 секунды и сделать примерно так...

Код:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 with trackbar1 do
  begin
    Form1.Caption := 'Громкость:' + IntToStr(Position);
    SelStart := Min;
    SelEnd := Position;
  end;
  timer1.Enabled := True;
end;

procedure TForm1.timer1Timer(Sender: TObject);
begin
  Form1.Caption := '';
end;
под ваше описание подходит)

но отсчет таймера начинается с того момента как вы зажали левую кнопку мыши на ползунке) и не учитывает отпущена ли мышь или нет... в моем понимании пока зажата мышь на ползунке, громкость должна отображаться постоянно, как только отпустили, должен начинаться отсчет

события OnMouseUp у трекбара нет) поэтому придется придумать что то... возможно перед запуском таймера проверять состояние кнопки мыши) или что либо еще...

P.S. sleep(); не используйте, т.к. зависает вся форма

Последний раз редактировалось unbanned; 22.07.2013 в 01:23.
unbanned вне форума Ответить с цитированием
Старый 22.07.2013, 03:53   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Внурти процедуры либо вызывайте Application.ProcessMessages, либо процедуру Repaint.
northener вне форума Ответить с цитированием
Старый 22.07.2013, 11:15   #4
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

northener
если есть возможность вообще не использовать, зачем что-то придумывать, тем более что интерфейc "замораживает" все равно.

в основном потоке использование sleep() редко оправдывает себя
unbanned вне форума Ответить с цитированием
Старый 22.07.2013, 11:35   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  TForm1 = class(TForm)
    TrackBar: TTrackBar;
    Timer: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure TrackBarChange(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
  private
    { Private declarations }
    StartTic: Cardinal;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer.Interval:=50;
end;

procedure TForm1.TrackBarChange(Sender: TObject);
begin
  Caption:=Format('Громкость: %d',[TrackBar.Position]);
  StartTic:=GetTickCount;
  Timer.Enabled:=True;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
  if GetTickCount-StartTic>=1000 then begin
    Caption:='Что-то';
    Timer.Enabled:=False;
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.07.2013, 19:57   #6
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо Вам всем, +1, но тут еще кое-что (я по поводу кода Аватара), все работает как надо, но немножко не так, когда держишь ползунок у трекбара, то срабатывает таймер, и заголовок формы выдает надпись "Что-то", это конечно я заменю названием текущего трека, но все же, таймер не должен срабатывать пока ползунок не будет отпущен

З.Ы. Гляньте заготовку плеера, дизайн, "слипание форм" и т.д, что можно улучшить из того, что у меня есть?
Вложения
Тип файла: rar player.rar (182.9 Кб, 10 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 22.07.2013 в 20:01.
Алексей_2012 вне форума Ответить с цитированием
Старый 23.07.2013, 06:21   #7
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Здравствуйте! Как уловить нажатие и удержание левой клавиши мыши на объекте трекбар, суть вот в чем: при изменении позиции трекбара вывести текущую позицию ползунка в заголовок формы, далее проверить: перемещается ли ползунок, если нет, то показать позицию трекбара в течении секунды и убрать ее(позиЦию), а если иначе, то динамически отображать позицию трекбара на форме, ну что-то типа регулятора громкости как в аимпе
Вот скажи тебе так в голову всбрело или ты ещё головой ударился? Да за тебя это уже сделал компонент, сгенерировав событие onChange ещё раз.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 24.07.2013, 13:12   #8
Стертор
Заблокирован
 
Регистрация: 24.07.2013
Сообщений: 41
По умолчанию

Код:
TForm1 = class(TForm)
    TrackBar: TTrackBar;
    Timer: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure TrackBarChange(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
  private
    { Private declarations }
    StartTic: Cardinal;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer.Interval:=50;
end;

procedure TForm1.TrackBarChange(Sender: TObject);
begin
  Caption:=Format('Громкость: %d',[TrackBar.Position]);
  StartTic:=GetTickCount;
  Timer.Enabled:=True;
end;

procedure TForm1.TimerTimer(Sender: TObject);
begin
  if GetTickCount-StartTic>=1000 then begin
    Caption:='Что-то';
    Timer.Enabled:=False;
  end;
end;
Банить надо таких "профессионалов", за тупость.
Стертор вне форума Ответить с цитированием
Старый 24.07.2013, 18:34   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Стертор Посмотреть сообщение
Банить надо таких "профессионалов", за тупость.
Умник, предложи не тупого
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.07.2013, 19:55   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и мой вариант:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ComCtrls, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Timer1: TTimer;
    TrackBar1: TTrackBar;
    procedure Timer1Timer(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure TrackBar1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
 Caption:=IntToStr(TrackBar1.Position);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
      Caption:='';
      TTimer(sender).Enabled:=false;
end;

procedure TForm1.TrackBar1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  TTrackBar(Sender).tag:=1;
  TrackBar1Change(sender);
  TTimer(sender).Enabled:=false;
end;

procedure TForm1.TrackBar1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if TTrackBar(Sender).tag=1 then  begin
    TTrackBar(Sender).tag:=0;
    Timer1.Enabled:=true;
  end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение формы за заголовок Airou C++ Builder 4 04.04.2013 03:31
Сменить заголовок формы из другой формы F1nZeR C# (си шарп) 4 27.08.2011 11:50
Убрать заголовок у формы tae1980 Microsoft Office Excel 2 26.01.2011 16:13
Заголовок Child формы имеет цвет неактивной формы, хотя форма активна? PrimaryPro Общие вопросы Delphi 0 12.03.2010 11:12
Как реализовать перемещение ползунка при проигрывании mp3 файла компонент mediaplayer, в нужную позицию? strannik Компоненты Delphi 5 12.12.2006 05:23