加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 两个TrackBar镜像

发布时间:2020-12-15 09:52:21 所属栏目:大数据 来源:网络整理
导读:我想知道如何在trackbar1.position的相反方向上制作我的第二个trackbar.position镜像. 例如. 范围从1到100. 所以当TrackBar1.Position:= 2时,则trackbar2.Position:= 99 无论轨道轨道走哪条路,我都希望以相反的方向镜像. 到目前为止,我的代码是:(对使用密
我想知道如何在trackbar1.position的相反方向上制作我的第二个trackbar.position镜像.
例如.
范围从1到100.

所以当TrackBar1.Position:= 2时,则trackbar2.Position:= 99
无论轨道轨道走哪条路,我都希望以相反的方向镜像.

到目前为止,我的代码是:(对使用密钥不感兴趣),只是鼠标交互.

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;

我可能过度了.也许有一种更简单的方法.我更喜欢简单的方法.
谢谢,

解决方法

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

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;

另类开始(Ken White建议和我的评论; o)):

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读