当它出现时我买了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,或者这仅仅是我的特定字符串的长度是多少?
我使用的是第三方控件,它是TComponent的后代,我希望它有滚动条,最好是autoscrollbars.
我可以从TComponent获得它们吗?
如果不这样做,我可以将TPanel放在我的主窗体及其上的组件上并获取滚动条吗?我打算让组件(和Panel,或其他)成为alClient,以便在我的组件调整大小时自动调整,但我也喜欢它们有(自动)滚动条.
旧的Delphi 7,取消选中运行时包并构建所有技巧似乎不再起作用,所以我无法恢复任何适合我的Delphi项目的运行时BPL.
我有一个问题,我可能会在这里提出另一个问题和链接,我认为可以通过包含一个特定的BPL来解决VCL.CheckLst.pas.
我不只是知道这个问题的答案的原因是,当我开始一个新的VCL形成的项目,没有VCL BPLs在默认情况下,运行时包,有RTL和一些firemonkey东西和良好的老MadExcept和印地,但没有VCL那是什么处理?我的Delphi配置错误了吗?
[编译: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) 我正在尝试使用以下代码获取组合框项目数.它不会给出错误,也不会给出正确的计数.我想我必须将int转换为字符串,但是如何?
ComboBox1->ItemIndex = 1;
int count = ComboBox1->Items->Count;
Edit1->Text = "Count: " + count;
Run Code Online (Sandbox Code Playgroud) 为许多组合框编写代码以自动选择文本值的项索引会变得很麻烦.问题是,当我通过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)
我认为这是VCL中的一个错误,因为即使我从不需要项索引,用户界面仍然会起作用.在我的情况下,我永远不需要观察项目索引,因为我将文本值作为字符串发送到服务器.但是,由于未分配索引,当用户通过键入或下拉框以外的方式进行导航时,控件本身也不会以应有的方式作出反应.
我可以在全局级别上传播到我的所有组合框控件(至少在给定的表单内)以通过代码分配文本值自动选择列表中的相应值?
我需要制作'图形用户界面',我需要一些VCL组件来选择一些文件.
此组件必须选择文件,但用户不必放置文件的名称.
我正在搜索信息,但没有任何帮助我.
我需要帮助加速我的项目,我有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) 我最近调试了一个复杂的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()?
我在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),此代码可以正常工作.
vcl ×10
delphi ×9
c++builder ×3
delphi-xe2 ×3
c++ ×1
combobox ×1
handle ×1
idhttp ×1
tform ×1
vcl-styles ×1