标签: vcl

VCL/Delphi/BCB - 我应该使用哪种IDE /语言?

当它出现时我买了Delphi 1 - 并且被迷住了.当BCB问世(D3,iirc)时,我换了,主要是因为我专业地使用了C/C++几十年.

我已经"离开"了7年或8年,现在又回来了.我还有BCB 6和Delphi 7(更不用说Kylix了).

我总觉得C++比Pascal更舒服 - 纯粹是因为工作日熟悉.但实际上,iirc,大多数第三方VCL组件都是用Delphi/Pascal编写的.我认为我以前在从BCB调试Delphi组件时遇到了问题,但我错误地记得.

Anyhoo,现在我回来并打算使用VCL组件/破解相同的代码/调试它们并编写我自己的一些代码.

鉴于我对C++稍微有点熟悉,有没有令人信服的理由选择Delphi而不是BCB,或者这仅仅是我的特定字符串的长度是多少?

delphi vcl c++builder

1
推荐指数
1
解决办法
1335
查看次数

如何将滚动条添加到TComponent?

我使用的是第三方控件,它是TComponent的后代,我希望它有滚动条,最好是autoscrollbars.

我可以从TComponent获得它们吗?

如果不这样做,我可以将TPanel放在我的主窗体及其上的组件上并获取滚动条吗?我打算让组件(和Panel,或其他)成为alClient,以便在我的组件调整大小时自动调整,但我也喜欢它们有(自动)滚动条.

delphi vcl c++builder

1
推荐指数
1
解决办法
1996
查看次数

什么是Delphi XE2 VCL运行时BPL?

旧的Delphi 7,取消选中运行时包并构建所有技巧似乎不再起作用,所以我无法恢复任何适合我的Delphi项目的运行时BPL.

我有一个问题,我可能会在这里提出另一个问题和链接,我认为可以通过包含一个特定的BPL来解决VCL.CheckLst.pas.

我不只是知道这个问题的答案的原因是,当我开始一个新的VCL形成的项目,没有VCL BPLs在默认情况下,运行时包,有RTL和一些firemonkey东西和良好的老MadExcept和印地,但没有VCL那是什么处理?我的Delphi配置错误了吗?

delphi vcl delphi-xe2 runtime-packages

1
推荐指数
1
解决办法
3210
查看次数

一次只检查一个CheckBox

[编译:Delphi XE2]

昨天我花了一整天的时间尝试各种方法来完成这个特定的任务,但他们都以相同的结果结束了.

使用TRZCheckGroup和此示例查看已检查的内容等.

procedure TFrmMain.cbOptionsChange(Sender: TObject; Index: Integer; NewState: TCheckBoxState);
var
  ItmIndex0, ItmIndex1: Integer;
begin
  { Initialize ItemIndex's }
  ItmIndex0 := -1;
  ItmIndex1 := -1;

  { Return the position Index of the string's(0 and 1) }
  ItmIndex0 := cbOptions.Items.IndexOf('One');
  ItmIndex1 := cbOptions.Items.IndexOf('Two');

  { Which CheckBox has been Checked } 
  cbOptions.ItemChecked[ItmIndex0] := True;
  cbOptions.ItemChecked[ItmIndex1] := False;
end;
Run Code Online (Sandbox Code Playgroud)

注意:^这不是我的最终代码只是我如何处理CheckBoxes的一个例子.

像 -

if cbOptions.ItemChecked[ItmIndex0] then
  cbOptions.ItemChecked[ItmIndex1] := False
else cbOptions.ItemChecked[ItmIndex1] := True;
Run Code Online (Sandbox Code Playgroud)

他们第一次工作然后它总是评估为真,我理解为什么.当我取消检查第一个CheckBox时,else位才会生效,这显然不是我想要的结果.

似乎事件停止工作,并且由于某种原因,我的一些尝试已经解雇了两次.

关于cbListOptionsChange的NewState Param,这是什么,它能帮助我吗?

任何有关这方面的帮助将非常感激.

谢谢.

if cbOptions.ItemChecked[ItmIndex0] then
  cbOptions.ItemChecked[ItmIndex1] …
Run Code Online (Sandbox Code Playgroud)

delphi vcl delphi-xe2

1
推荐指数
1
解决办法
7746
查看次数

如何获取ComboBox项目数

我正在尝试使用以下代码获取组合框项目数.它不会给出错误,也不会给出正确的计数.我想我必须将int转换为字符串,但是如何?

ComboBox1->ItemIndex = 1;
int count = ComboBox1->Items->Count;
Edit1->Text =  "Count: " + count;
Run Code Online (Sandbox Code Playgroud)

c++ vcl c++builder

1
推荐指数
1
解决办法
5480
查看次数

如何通过代码在组合框中分配文本自动选择索引?

为许多组合框编写代码以自动选择文本值的项索引会变得很麻烦.问题是,当我通过code(ComboBox.Text:= 'Some value';)分配文本值时,即使精确值已经在列表中,也不会自动选择项索引.所以我最后为每个组合框编写代码,通过查找值来选择项目索引.在其他情况下,分配的值可能不在列表中,在这种情况下,进一步处理将添加它.但是当该值在列表中时,我希望自动分配项目索引.

我可以通过删除一个新的组合框,分配一些项目,然后通过代码为其分配文本值来复制此行为.要验证,我在此组合框内单击,然后按键盘上的向上或向下箭头,它将跳转到列表的开头.但是,如果我使用此指定值下拉组合框,则会在列表中选择该值并指定项目索引.但我不应该这样做.

启用自动完成,当用户手动键入此值时,它会自动选择此项目索引.但是Text,为列表中实际存在的属性赋值不会选择相应的项索引.

例:

ComboBox.Items.Add('One');
ComboBox.Items.Add('Two');
ComboBox.Items.Add('Three');
ComboBox.Items.Add('Four');
ComboBox.Items.Add('Five');
ComboBox.Text:= 'Five';
Run Code Online (Sandbox Code Playgroud)
  • 用户在组合框控件内单击
  • 用户按下键盘上的向上箭头
  • 选择列表'One'中的第一项而不是'Four'

我认为这是VCL中的一个错误,因为即使我从不需要项索引,用户界面仍然会起作用.在我的情况下,我永远不需要观察项目索引,因为我将文本值作为字符串发送到服务器.但是,由于未分配索引,当用户通过键入或下拉框以外的方式进行导航时,控件本身也不会以应有的方式作出反应.

我可以在全局级别上传播到我的所有组合框控件(至少在给定的表单内)以通过代码分配文本值自动选择列表中的相应值?

delphi vcl combobox delphi-xe2

1
推荐指数
1
解决办法
1740
查看次数

如何在Delphi中选择文件

我需要制作'图形用户界面',我需要一些VCL组件来选择一些文件.

此组件必须选择文件,但用户不必放置文件的名称.

我正在搜索信息,但没有任何帮助我.

delphi vcl

1
推荐指数
1
解决办法
9052
查看次数

如何在delphi 10中使用带有idhttp的线程

我需要帮助加速我的项目,我有2个ListBox,第一个是完整的URL,第二个我存储导致404错误的Listbox1的URL,它只是检查过程.idhttp需要大约2s来检查1个url,我不需要html,因为解密过程需要时间,所以我决定在我的项目中添加线程,到目前为止我的代码

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  IdSSLOpenSSL, Vcl.StdCtrls, IdBaseComponent, IdComponent, 
  IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

 private

 public

 end;

 Type
   TMyThread = class(TThread)
     IdHTTP1: TIdHTTP;
     Button1: TButton;
     ListBox1: TListBox;
     ListBox2: TListBox;
     Button3: TButton;
     Memo1: TMemo;

  private
    fStatusText : string;
    lHTTP: TIdHTTP;

  protected
    procedure Execute; override;
  public
    Constructor Create(CreateSuspended : boolean); …
Run Code Online (Sandbox Code Playgroud)

delphi vcl idhttp delphi-10-seattle

1
推荐指数
1
解决办法
2017
查看次数

为什么TForm.Handle是一个吸气剂而不是一个领域?

我最近调试了一个复杂的bug.这是由访问不存在的Form.Handle(带状指针)引起的.这个bug以相当意想不到的方式向我揭示 - 访问Forms会Handle导致调整大小和重新绘制.

我希望Form.Handle通过垃圾指针访问只会返回一些垃圾THandle.期望Handle在表单创建时创建一次并保持相同直到Form被销毁.

这个问题

为什么会这样,这TForm.Handle不是一个在表单创建时初始化并通过访问的字段

property Handle: Integer read FHandle;
Run Code Online (Sandbox Code Playgroud)

,但是是一个吸气剂

property Handle: Integer read GetHandle;
Run Code Online (Sandbox Code Playgroud)

CreateWnd在第一次访问时创建Handle甚至Window()?

delphi vcl handle tform

1
推荐指数
1
解决办法
306
查看次数

使用VCL主题在FormClose中获取访问冲突错误

我在VCL开发了一个使用VCL主题的应用程序.此应用程序需要TPageControl和内部(子)形式.

每个子表单在OnClose中具有相同的方式:Parent.Destroy;

 MsgResp := MessageDlg('Closing info....', mtWarning, [mbYes, mbNo, mbCancel], 0);
  case MsgResp of
    mrYes:
      begin
        DoSomething; {Save something}
        Parent.Destroy;
      end; 
    mrNo:
      begin
        Parent.Destroy;
      end;
    mrCancel:
      begin
        Exit;
      end;
 end;
Run Code Online (Sandbox Code Playgroud)

如果我将主题设置为像Sapphire Kamri(或其他)的应用程序,我在破坏父组件时会出现访问冲突错误.但是,如果我使用默认样式(Windows),此代码可以正常工作.

delphi vcl vcl-styles

1
推荐指数
1
解决办法
343
查看次数