我创建了一个TScrollBox.我在Button按钮上动态添加了Label和Edit Box.为了设置组件的位置,我使用了组件的高度,宽度,左侧,顶部属性.但是当Scroll Bar在添加了5个组件后出现在屏幕上时,下一个组件位置会受到干扰.并且下一个组件不会以同步方式放在ScrollBox上.
这似乎是一个非常简单的问题,但我无法使用滚动条来显示滚动条,这让我发疯.
情况就是这样.我需要在表单的一部分中显示可变数量的帧.可以通过TSplitter或通过调整表单大小来调整显示这些帧的区域.
我在创建表单时根据数据库中的记录动态生成帧.这些框架是FlowPanel的父级,它负责框架放置.FlowPanel位于ScrollBox中.
由于FlowPanel,当用户使用TSplitter或调整表单大小时,帧可能会重新对齐.如果任何框架重新定位在窗体的视图之外,我希望ScrollBox显示滚动条,以便用户可以向下滚动到那些不可访问的框架.这不会发生.位于滚动框尺寸之外的流动板区域中的那些框架是不可访问的.
我在滚动框中使用简单对象构建了一些测试,如果任何包含的对象出现在滚动框的维度之外,则滚动框会正确放置滚动条.
如果流动板与clClient(滚动框)对齐或锚定到滚动框的两侧,或者没有这些都没有关系.
我意识到我可以使用TPanel,并在面板的OnResize事件处理程序的代码中执行框架的放置和重新定位,但这就是FlowPanel的用途.
这里发生了什么?我已经摆弄了许多不同的滚动条属性,仍然无法让它工作.问题是什么,有解决方案吗?
好.我选择Ewe的答案是正确的,但是做这项工作的诀窍在于他的一个评论,我仍然没有对结果感到满意.
这是独家新闻.我确实按照Ewe建议的方式配置了我的ScrollBox和FlowPanel,但是使用了许多其他设置,因为该配置不起作用.我很确定这是由于表单的用户界面的复杂性,它在面板中有许多面板,许多分割器,并且表单本身是PageControl的TabSheet的父级(我省略了这个事实,因为测试表格作为一个立场单独形式产生相同的结果).
让它发挥作用的是Ewe建议将FlowPanel的AutoWrap关闭再打开,尽管它很笨重.我将以下代码添加到ScrollBox的OnResize事件处理程序:
procedure TCurrentJobsForm.ScrollBox1Resize(Sender: TObject);
begin
  Flowpanel1.Autowrap := False;
  FlowPanel1.AutoWrap := True;
end;
调整大小时会有明显的闪烁,但我可以忍受,因为它会产生所需的结果.一旦用户调整表单大小,它将始终使用这些维度重新创建,因此调整大小是用户不经常进行的操作.
很容易检测到a的垂直滚动条TScrollBox是否位于最顶层:
IsScrollBarAtTop := ScrollBox1.VertScrollBar.Position = 0;
但是如何检测a的垂直滚动条TScrollBox是否处于非常底部?
有没有简单的方法来跟踪他的滚动条滚动TScrollbox内容?我有几个TScrollBox组件(每个组件都有一些组件),并希望保持它们同步.如果其中一个滚动框滚动(垂直或水平),我需要同步滚动其他滚动框.这就是为什么我需要知道滚动条位置何时被更改.这很奇怪,但是Delphi的TScrollbox组件没有这样的事件.
我创建了一个自定义滚动框派生自TScrollbox,它的工作方式相同,只是当它在滚动条的客户区域中拖动时会滚动.
我现在的问题是,当我的CustomScrollbox中的按钮或面板上有鼠标时,我无法拖动滚动.
MouseDown,MouseUp,MouseMove覆盖不会触发,因为它会悬停在不同的控件中.
当我开始拖动时,如何跟踪MouseDown,MouseUp,MouseMove并阻止按钮/面板事件触发(在我的CustomScrollbox内)?
这是我平滑的CustomScrollbox的视频
我有一个简单的大小形式与TScrollBox(Align := alClient)和一些控件放在TScrollBox上.如果用户更改表单大小,TScrollBox将显示并隐藏HorzScrollBar和VertScrollBar(取决于实际的客户端表单大小).
如何在运行时检查 - HorzScrollBar或VertScrollBar现在可见吗?
TControlScrollBar.Visible 不是答案,因为它只有调节功能.
我在网上发布了这个:Show来自DLL的表单TScrollBox
我想要做的是调用并在Delphi中显示一个表单TScrollBox.不是Show或ShowModal
示例但不包含任何DLL:
Form1.Parent:= ScrollBox;
 Form1.Show;
我如何使用内部表单的DLL中的此示例
谁能提供一个例子?
问候,
我遇到了一个小问题.我正在动态生成一些控件并将它们放在一个TScrollbox组件上.但我注意到,如果滚动条可见,用户可以清楚地看到正在创建和放置的每个控件.所以看起来很多工作正在进行而且很慢.
我隐藏了滚动条并在其上生成了所有控件,这花费的时间更少,没有闪烁和相似.但这是问题所在.当我再次显示滚动条时,直到我实际调整表单大小时才会显示其滚动条.(滚动条的对齐方式是alClient)
有想法该怎么解决这个吗?
尝试重新粉刷,但它没有奏效.刷新也不起作用.
谢谢
编辑:
TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
    fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;
上面的代码显示了我如何隐藏和显示滚动框.
fNaujasTermas生成一个包含多个轨迹栏,图像和编辑的面板.
我不确定可能会有一步一步的解释.只需创建一个过程,它将生成一些带有许多控件的面板,并将ScrollBox设置为父级.在生成任何内容之前隐藏滚动框,并在完成后取消隐藏它.
哦顺便说一句,面板是对齐的alTop.因此,每次创建新面板并将其放入滚动框时,它将显示在顶部,而所有其他面板将向下移动.
这就是我创建滚动条本身的方式
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
EDIT2:我想我知道如何重现这一点.
看起来,当向滚动框添加新面板时,它不会将其计入已存在于该滚动框中的所有控件的总高度.
所以举个例子.让我们说1面板的高度为200px.
ScrollBox高度为300px.
因此,在创建2个高度为400px的面板后,即使第二个面板的一半不可见,滚动框也不会显示滚动条.如果我再添加一个面板= 600px,滚动条将显示滚动条,看起来它只会滚动每2个面板,而不是3.当尝试滚动这样的窗口时,值会重新计算,一切都很好地显示.
所以主要的问题是,如何使滚动条"及时"显示滚动条,这样没有面板被切成一半?
我有一个THorzScrollBoxin a form,还有一些TStyledControlsinside。每个StyledControl都有一个Tag识别。使用的TEdit通知的值,我能找到里面ScrollBox的具体Control他tag。
如果control我搜索的那个不在屏幕上,我想滚动ScrollBox显示它。
如何以编程方式执行此操作?
我有一个同步Scrollboxes的简单示例,我控制哪一方通过单选按钮同步 - 同步左侧或右侧.当我编译时,我收到编译器消息:
[dcc32警告] Unit1.pas(51):W1036变量'ScrlBox1'可能尚未初始化
[dcc32警告] Unit1.pas(51):W1036变量'ScrlBox2'可能尚未初始化
这是一个简单的例子:
procedure TForm1.Button1Click(Sender: TObject);
var
  ScrlBox1, ScrlBox2: TScrollBox;
begin
    if radiobtn_SyncLeftSides.Checked then // Snyc Left side
    begin
      ScrlBox1 := ScrollBoxLeft1;
      ScrlBox2 := ScrollBoxLeft2;
    end
    else if radiobtn_SyncrightSides.Checked then  // Snyc Right side
    begin
      ScrlBox2 := ScrollBoxRight1;
      ScrlBox1 := ScrollBoxRight2;
    end;
    // Sync scroll boxes
    ScrlBox2.VertScrollBar.Position := ScrlBox1.VertScrollBar.Position;
    ScrlBox2.HorzScrollBar.Position := ScrlBox1.HorzScrollBar.Position;
end;
这是什么问题?
如果我在开头添加这个消息就消失了:
ScrlBox1:= TScrollBox.Create(nil);
ScrlBox2:= TScrollBox.Create(nil);
但我认为创建滚动框变量是不必要的,对吧?这些只是表单上控件的变量指针.
我把各种各样的帧放在TScrollBox上.滚动时,它们正在正确滚动.现在我想添加一个保留在固定位置的位图.我尝试了一个与TScrollBox具有相同父级(TPanel)的TImage.即使我使用BringToFront,我也看不到分配给TImage的位图.
有人可以帮帮我吗?
提前致谢,
阿诺德
我观察到当你隐藏水平滚动条时,它在使用时不会滚动
sbxStudyBtnHolder.Perform(WM_HSCROLL, SB_LINEDOWN, 0);
我们怎样才能使它成为可能?
delphi ×12
tscrollbox ×12
bitmap ×1
delphi-2009 ×1
delphi-xe6 ×1
delphi-xe7 ×1
dll ×1
firemonkey ×1
fixed ×1
scroll ×1
scrollbar ×1
sendmessage ×1
tframe ×1