我正在尝试编写一个简单的组件,允许您使用SDL 1.3 API在Delphi窗口上嵌入一个或多个SDL渲染表面.它将编译和安装得很好,但是当我尝试在表单设计器中使用该组件时,每当我尝试在对象检查器中访问其属性,保存表单或删除组件,并将其放置在一个上时,它就会引发AV.然后尝试运行的表单给出了一个链接器错误:由于某种原因,它显然无法正确读取DFM.
DLL可以在http://www.libsdl.org/tmp/SDL-1.3-dll.zip找到,我的组件的源代码可以在这里下载.SDL.pas是一个JEDI-SDL头文件; 剩下的就是我自己的代码.
我没有看到任何理由在表单设计器中引发AV.如果我在运行时动态创建控件,我没有任何稳定性问题.任何人都可以看看这个,也许可以提供一些反馈,可以帮助我清理它?
我有2班Engine.java和Window.java.在Window.java我有一个按钮,将创建的实例Engine.java.
我该如何传递Window.java给Engine.java?
我知道我可以使用它,但这表示按钮的那一刻按钮.
原因是我希望能够访问Window.java内部的所有组件Engine.java.
public class Engine{
Window window;
public Engine(Window en){
window = en;
}
//rest of your code
}
public class Window(){
btnDownload.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//At the point where you create the Engine
Engine en = new Engine(this);
//rest of your code
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个TCustomRichEdit,上面有一些速度按钮.我怎样才能完成这个行为?组件的高度需要是按钮+ richedit.
[B][I][U]
+-------+
|A1REdit|
| |
+-------+
Run Code Online (Sandbox Code Playgroud)
目前我有以下代码:
private
FBoldButton: TSpeedButton;
constructor TA1RichEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FBoldButton := TSpeedButton.Create(Self);
FBoldButton.Parent := Self;
end;
destructor TA1RichEdit.Destroy;
begin
FreeAndNil(FBoldButton);
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
这描绘了richedit上的速度按钮(因为richedit是父级),我需要按钮位于richedit之上.在这段代码之后,richedit并没有像它应该的那样绘画.
我在下面写了一个样本组件:
unit Test;
interface
uses
System.SysUtils, System.Classes, System.Variants, VCL.Dialogs;
type
TTest = class(TComponent)
private
fName: TStringList;
{ Private declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); Override;
destructor Destroy; override;
published
{ Published declarations }
property Names: TStringList read fName;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TTest]);
end;
{TTest }
constructor TTest.Create(AOwner: TComponent);
begin
inherited;
fName := TStringList.Create;
for i:= 1 to 100 do
fName.Add(IntToStr(i));
end;
destructor TTest.Destroy;
begin
fName.Free;
inherited;
end;
end.
Run Code Online (Sandbox Code Playgroud)
现在当我在Delphi上安装它时,在Object Inspector中我有一个名为"Names"的属性,我应该双击它,然后一个对话框显示存储在Name上的TStringList项.
我想在其他组件(如TEdit等)中使这个属性像Font.Name,当点击Name属性,列表显示,用户可以从中选择一个项目,然后将项目分配给属性并显示为Object …
我在Windows 7 x64上安装了Delphi 7.事情顺利进行,但现在,当我打开或创建数据模块时,它会混乱组件调色板.通过搞砸,我的意思是它似乎在争夺哪个标签组件,或者完全隐藏它们.这是非常不寻常的行为.
卸载并重新安装Delphi 7没有帮助.
我想通过下拉列表在Object Inspector中编辑已发布的属性.让我们说吧 DataSet: TDataSet.
我还没开始,但是使用这个http://delphi.about.com/library/bluc/text/uc092501c.htm我将创建一个属性编辑器,在GetValues方法中我应该做一些工作来找出哪些组件,是descendats TDataSet,已经是我现在设计的形式.
但没有找到任何例子.我应该如何在我的PropertyEditor.GetValues方法中提供对当前表单的访问权限,还是有另一种方法?
为什么不是这样的: 如何创建列出其他组件的组件属性?
因为在下拉列表中的某些时候应该列出两种或更多类型的组件.最后 - 我需要在Property中保存一个指向某个组件的指针,该组件与声明的类型不同.
我再说一遍:Property: TClassNone并且应该在那里列出:TClassOne, TClassTwo and TClass Three这不是下降的TClassNone.
什么是背后的目的bit在成员Component Type,以及TypeBit与SystemBit成员在Entity为阿蒂米斯ECS?
这些是Artemis ECS的git存储库的一些屏幕截图,它们引用ComponentType和Entity:
对于 ComponentType

这是git的链接.
关于Delphi XE的快速问题.
我正在尝试制作具有透明背景的自定义圆形组件,以便在添加到表单上时,组件可以与其他组件重叠.我已经尝试过Brush.Style:=bsTransparent;或者ellipse()更多...但仍然无法找到使边缘区域透明的方法.
反正我是否可以在不使用其他lib或api的情况下使组件的边缘区域透明?
我的程序运行时创建的对象有问题
首先我创建n个对象(假设n:= 3)
for i:=0 to n-1 do
begin
With TGauge.Create(Form1) do
begin
Parent := Form1; // this is important
Left := 20; // X coordinate
Top := 20+i*45; // Y coordinate
Width := 250;
Height := 20;
Kind := gkHorizontalBar;
Name := 'MyGauge'+IntToStr(i);
//....
Visible := True;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这三个对象在表单中创建并可见.现在我想改变它的'属性,但每当我尝试访问这些创建的对象时,我只会得到它
EAccessViolation
Run Code Online (Sandbox Code Playgroud)
例如,当我尝试获取一个对象的名称时
g := Form1.FindComponent('MyGauge0') as TGauge;
Form1.Label1.Caption:=g.Name;
Run Code Online (Sandbox Code Playgroud)