首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个TrackBar镜像

两个TrackBar镜像
EN

Stack Overflow用户
提问于 2012-05-16 17:34:45
回答 1查看 1.3K关注 0票数 6

我想知道如何在trackbar1.position的相反方向上制作我的第二个trackbar.position镜像。例如:范围从1到100。

所以,当TrackBar1.Position := 2,然后trackbar2.Position := 99时,不管轨迹条朝哪个方向走,我都想朝相反的方向镜像。

这是我到目前为止的代码:(对使用按键做这件事不感兴趣),只是鼠标交互。

代码语言:javascript
复制
Direction : string; 
Skip : boolean;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
if TrackBar1.Position = TrackBar2.Position then
begin
if Direction = 'up' then   TrackBar2.Position := TrackBar2.Position + 1;
if Direction = 'down' then TrackBar2.Position := TrackBar2.Position - 1;
skip := true;
end;


if TrackBar1.Position < TrackBar2.Position then
begin 
if skip = false then
begin
TrackBar2.Position := TrackBar2.Position - 1;
Direction := 'down';
end;
end
else
begin
if skip = false then
begin
TrackBar2.Position := TrackBar2.Position + 1;
Direction := 'up';
end;
end;
end;

我可能做的有点过头了。也许有一种更简单的方法。我更喜欢更简单的方法。谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-16 17:48:01

2个轨迹栏OnChange事件链接到此代码:

代码语言:javascript
复制
procedure TForm1.TrackBarChange(Sender: TObject);
var
  tbSource, tbTarget: TTrackBar;
begin
  if Sender = TrackBar1 then // Check the Trackbar which triggers the event
  begin
    tbSource := TrackBar1;
    tbTarget := TrackBar2;
  end
  else
  begin
    tbSource := TrackBar2;
    tbTarget := TrackBar1;
  end;
  tbTarget.OnChange := nil;                           // disable the event on the other trackbar
  tbTarget.Position := tbSource.Max + tbSource.Min - tbSource.Position; // set the position on the other trackbar
  tbTarget.OnChange := TrackBarChange;                // define the event back to the other trackbar

  // Call a function or whatever after this line if you need to do something when it changes
//  lbl1.Caption := IntToStr(TrackBar1.Position);
//  lbl2.Caption := IntToStr(TrackBar2.Position);
end;

Alternative start (由肯·怀特建议和我的评论;o):

代码语言:javascript
复制
procedure TForm1.TrackBarChange(Sender: TObject);
var
  tbSource, tbTarget: TTrackBar;
begin
//  if Sender is TTrackBar then      // is it called 'from' a trackbar?
//  begin
    tbSource := TTrackBar(Sender); // Set the source

    if tbSource = TrackBar1 then   // Check the Trackbar which triggers the event
      tbTarget := TrackBar2
    else
      tbTarget := TrackBar1;

    tbTarget.OnChange := nil;                                             // disable the event on the other trackbar
    tbTarget.Position := tbSource.Max + tbSource.Min - tbSource.Position; // set the position on the other trackbar
    tbTarget.OnChange := TrackBarChange;                                  // define the event back to the other trackbar

    // Call a function or whatever after this line if you need to do something when it changes
//    lbl1.Caption := IntToStr(TrackBar1.Position);
//    lbl2.Caption := IntToStr(TrackBar2.Position);
//  end;
end;
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10615796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档