社区
C++ Builder
帖子详情
能否让一个TrackBar显示有两个滑块??
lxj1984
2006-06-30 09:36:52
我现在需要一个功能,用滑块限定范围,需要在一个TrackBar中两个滑块,请问能不能实现??我找了半天也没有找到相关选项
还有个小问题,怎样在上面显示相关数值??
...全文
836
10
打赏
收藏
能否让一个TrackBar显示有两个滑块??
我现在需要一个功能,用滑块限定范围,需要在一个TrackBar中两个滑块,请问能不能实现??我找了半天也没有找到相关选项 还有个小问题,怎样在上面显示相关数值??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BlueDeepOcean
2006-07-01
打赏
举报
回复
给出来吧,现在的程序员,哎……
//---------------------------------------------------------------------------
/*
利用TPanel完成对TTrackBar另一个滑块的模拟
*/
#include <vcl.h>
#pragma hdrstop
#include "Unt_SimulateTwoBlock.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Teg_SimulateTwoBlocks *eg_SimulateTwoBlocks;
TPoint *p;
bool IsClick;
int oldPos;
//---------------------------------------------------------------------------
__fastcall Teg_SimulateTwoBlocks::Teg_SimulateTwoBlocks(TComponent* Owner)
: TForm(Owner)
{
TrackBar->TickMarks = tmBoth;
Panel->Height = 20;
Panel->Width = 9;
Panel->Left = TrackBar->Left + TrackBar->ClientRect.Left + 7; //可变调整系数(1)
Panel->Top = TrackBar->Top + TrackBar->ClientRect.Top + 10; //可变调整系数(2)
Panel->Caption = "";
p = new TPoint;
oldPos = Panel->Left;
}
//---------------------------------------------------------------------------
void __fastcall Teg_SimulateTwoBlocks::PanelMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
{
p->x = X;
p->y = Y;
IsClick = true;
Panel->Color = clSilver;
}
}
//---------------------------------------------------------------------------
void __fastcall Teg_SimulateTwoBlocks::PanelMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if (IsClick)
{
if (p->x > X)
if (Panel->Left - (p->x - X) > oldPos)
{
Panel->Left -= (p->x - X);
//TrackBar的滑块每移动12个像素Position加1
if ((Panel->Left - oldPos) % 12 == 0)
TrackBar->SelEnd = (Panel->Left - oldPos) / 12; //也就是TrackBar的Position
}
else
{
Panel->Left = oldPos;
TrackBar->SelEnd = 0;
}
if (p->x < X)
if (Panel->Left + (X - p->x) < (TrackBar->Left + TrackBar->ClientWidth - 14)) //可变微调系数(1)×2
{
Panel->Left += (X - p->x);
if ((Panel->Left - oldPos) % 12 == 0)
TrackBar->SelEnd = (Panel->Left - oldPos) / 12;
}
else
{
Panel->Left = TrackBar->Left + TrackBar->ClientWidth - 16; //可变微调系数(3)
TrackBar->SelEnd = TrackBar->Max;
}
//由StatusBar显示各个结果
StatusBar->Panels->Items[0]->Text = TrackBar->SelEnd;
StatusBar->Panels->Items[1]->Text = TrackBar->SelStart;
StatusBar->Panels->Items[2]->Text = TrackBar->SelEnd - TrackBar->SelStart;
}
}
//---------------------------------------------------------------------------
void __fastcall Teg_SimulateTwoBlocks::PanelMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button == mbLeft)
{
IsClick = false;
Panel->Color = clBtnFace;
}
}
//---------------------------------------------------------------------------
void __fastcall Teg_SimulateTwoBlocks::TrackBarChange(TObject *Sender)
{
TrackBar->SelStart = TrackBar->Position;
StatusBar->Panels->Items[0]->Text = TrackBar->SelEnd;
StatusBar->Panels->Items[1]->Text = TrackBar->SelStart;
StatusBar->Panels->Items[2]->Text = TrackBar->SelEnd - TrackBar->SelStart;
}
//---------------------------------------------------------------------------
真如实观
2006-07-01
打赏
举报
回复
同意上面的做法.
lxj1984
2006-07-01
打赏
举报
回复
谢谢
“给出来吧,现在的程序员,哎……”
我想,你误会了.....
BlueDeepOcean
2006-06-30
打赏
举报
回复
对,就是那样。
lxj1984
2006-06-30
打赏
举报
回复
我这没有Examples,不知道你说的是怎样,不过我仔细看了你的话,也看了Word的滑动条,不知道你说的Label是不是用来标识滑动条上的数字的??我实在是想不出来,怎样才能在一条滑动条上,显示出两个滑块??还是说,让Label显示为类似滑块的形状,然后在鼠标事件中计算值后在滑动条上移动模拟??
BlueDeepOcean
2006-06-30
打赏
举报
回复
我都说了,另一个用TLabel代替的。很简单的,你再好好看看我上面说得。给你的例子我知道不符你的要求,那只是一个模拟状态条和滑块之间的关系的例子。
lxj1984
2006-06-30
打赏
举报
回复
谢谢,我用的D版,里面的HELP,EXAMPLE全没有.....
lxj1984
2006-06-30
打赏
举报
回复
非常感谢,不过我看了下,并不是我想要的。以下是示意
======▊==========▊=========
我想要这样显示,取得两块滑块中间的值。我试着想用两个TrackBar重叠,不过下面的会被遮住,并不能显示两个
BlueDeepOcean
2006-06-30
打赏
举报
回复
另外,你可以参考:
..\Program Files\Borland\CBuilder5\Examples\Apps\RichEdit
文件夹下面有关RichEdit的例子,其中模拟了Word风格的标尺,那就是利用TLabel组件完成标识块的模拟的,你可以参考它并从其中获得启示。其实不难,那个范围就是Label->Left和TrackBar->Width和TrackBar->Max之间的关系嘛。
BlueDeepOcean
2006-06-30
打赏
举报
回复
两个滑块的概念不清楚,看下面的例子,一个是指示滑块,另一个是蓝色进程条:
Form上放置两个Timer,时间分别为140和420,现在在各自Timer的OnTimer中分别处理指示滑块和蓝色进程条:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unt_TrackBar.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Teg_TrackBar *eg_TrackBar;
int Block,Pos;
//---------------------------------------------------------------------------
__fastcall Teg_TrackBar::Teg_TrackBar(TComponent* Owner)
: TForm(Owner)
{
TrackBar->TickMarks = tmBoth;
TrackBar->TickStyle = tsNone;
TrackBar->Height = 25;
BlockTimer->Interval = 140;
PositionTimer->Interval = BlockTimer->Interval * 3;
}
//---------------------------------------------------------------------------
void __fastcall Teg_TrackBar::BlockMove(TObject *Sender)
{
if ((bool)Block)
{
TrackBar->SelStart ++;
if (TrackBar->SelEnd < TrackBar->Max)
Block = 1;
else
Block = 0;
}
else
{
if (TrackBar->SelStart > TrackBar->Min)
Block = 0;
else
Block = 1;
TrackBar->SelStart --;
}
TrackBar->SelEnd = TrackBar->SelStart + 2;
}
//---------------------------------------------------------------------------
void __fastcall Teg_TrackBar::PositionMove(TObject *Sender)
{
if ((bool)Pos)
{
TrackBar->Position ++;
if (TrackBar->Position < TrackBar->Max)
Pos = 1;
else
Pos = 0;
}
else
{
if (TrackBar->Position > TrackBar->Min)
Pos = 0;
else
Pos = 1;
TrackBar->Position --;
}
}
//---------------------------------------------------------------------------
c# 双
滑块
控件 并
显示
两个
滑块
的刻度百分比
网上可以下载的双
滑块
控件都不理想,所以自己在网上的资源上再做了
一个
,类似于
trac
kbar
有双
滑块
,并
显示
两个
滑块
的刻度百分比
双
滑块
Trac
kBar
C#.Net
GDI+实现Range
Trac
kBar
双
滑块
C# .Net 基于GDI+实现双
滑块
控制
Trac
kBar
在指定范围内播放 菜鸟水平 勿喷~
漂亮的万能形状
滑块
,简单实现
trac
kbar
漂亮的万能形状
滑块
,简单实现
trac
kbar
,只要有函数,可以实现各种种样的
滑块
,这里实现的
两个
圆弧形的
滑块
。无须重绘,代码一看就会。
Delphi支持自定义背景及
滑块
图片的
Trac
kBar
控件
Delphi自带的T
Trac
kBar
控件只能
显示
默认的背景图片及拖动
滑块
,由于编制
一个
播放器的需要,自己编写了一可自定义图片的Img
Trac
kBar
组件包,该组件包有
两个
类似T
Trac
kBar
的不同控件以适应不同的需求: 第
一个
控件是:TPlayProgress适用于
显示
播放进度条效果,该控件除了可设置最小值(Min)和最大值(Max)外还可设置已加载位置(PosLoad)和已播放位置(PosPlay)等属性以模拟影片的加载及播放进度效果,另外该控件还适用于根据窗口大小缩放自身大小,控件的图片及
滑块
的位置自动按各属性进行按比例调整。 第二个控件是:TVolumeCtrlBar适用于
显示
音量大小调节效果,该控件不局限于TPlayProgress控件的长条形状外观,可设置成用户自定义的图片外观。 这个控件都可以设置背景透明(默认)或不透明以满足不同情况的需求。
简单的滑动程序(类似
Trac
kBar
)
该程序演示如何自制类似
Trac
kBar
控件,效果超级简单,只为回答论坛中的
一个
问题,仅此而已!如有想一起学习的,欢迎一起讨论。
C++ Builder
13,822
社区成员
102,680
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章