我使用的是一个非常大的delphi第三方库,没有源代码,这个库有几个带抽象方法的类.我需要确定运行时Descendant类实现abtract方法的时间,以避免EAbstractError: Abstract Error向用户显示自定义消息或使用其他类代替.
例如,在此代码中,我想在运行时检查是否MyAbstractMethod已实现.
type
TMyBaseClass = class
public
procedure MyAbstractMethod; virtual; abstract;
end;
TDescendantBase = class(TMyBaseClass)
public
end;
TChild = class(TDescendantBase)
public
procedure MyAbstractMethod; override;
end;
TChild2 = class(TDescendantBase)
end;
Run Code Online (Sandbox Code Playgroud)
我如何确定在运行时的Descendant类中是否实现了抽象方法?
在delphi XE中我可以使用启动过程,但这种方法在delphi 2007中不存在.
这个示例代码在delphi xe中运行正常,使用Start
MyThread:=TMyThread.Create(True);
MyThread.FreeOnTerminate :=True;
MyThread.Property1:=900;
MyThread.Property2:=2;
MyThread.Start;
Run Code Online (Sandbox Code Playgroud)
但是在delphi 2007中,该start过程不存在,所以我使用的是在新版本的delphi中不推荐使用的简历过程.
MyThread:=TMyThread.Create(True);
MyThread.FreeOnTerminate :=True;
MyThread.Property1:=900;
MyThread.Property2:=2;
MyThread.Resume;
Run Code Online (Sandbox Code Playgroud)
所以quieon是,resume在delphi 2007中可以使用,或者我必须使用另一种方式来启动一个被挂起的线程?
提前致谢.
在delphi中存在一个函数Ord,该函数返回序数类型表达式的序数值.
例如,您可以通过这种方式检索char的Ascii值
奥德('A')回归65
奥德('a')返回97
在C++中我必须使用哪个函数来获取Char的ascii值.
当我创建Delphi控制台应用程序时,我可以部署生成的EXE文件而不必担心外部DLL文件.但是如果我创建非常简单的C++ Builder(版本2007)控制台应用程序(没有VCL),则EXE文件需要CC3280MT.dll运行该文件.
如何避免我的C++ Builder控制台应用程序需要该CC3280MT.dll文件?
即使这个简单的代码也会导致这种依
#include <iostream.h>
#pragma hdrstop
#pragma argsused
int main(int argc, char* argv[])
{
cout << "Hello" << endl;
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码使表单透明,但是当应用程序启用了VCL样式时,表单使用VCL样式的背景颜色绘制而不是透明.
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure CreateParams(var Params:TCreateParams); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := WS_EX_TRANSPARENT or WS_EX_TOPMOST;
//Params.ExStyle := Params.ExStyle or WS_EX_LAYERED;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Brush.Style:=bsClear;
BorderStyle:=bsNone;
//SetLayeredWindowAttributes(Handle, 0, 230, $00000002);
end;
Run Code Online (Sandbox Code Playgroud)
仅供参考如果将vcl样式设置为,则代码可以正常工作Windows.
还有另一种方法可以使表单透明以解决此问题吗?
我正在使用该DrawThemeBackground功能在画布上绘制一些系统元素,我需要绘制一个表单的标题按钮,我唯一想念的部分就是如何获得default标题按钮的大小.Exist any Uxtheme function to get that info?

我需要使用控制台应用程序处理一组bmp文件,我正在使用TBitmap类,但代码无法编译,因为此错误
E2003 Undeclared identifier: 'Create'
Run Code Online (Sandbox Code Playgroud)
此示例应用程序再现了该问题
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Vcl.Graphics,
WinApi.Windows;
procedure CreateBitMap;
Var
Bmp : TBitmap;
Flag : DWORD;
begin
Bmp:=TBitmap.Create; //this line produce the error of compilation
try
//do something
finally
Bmp.Free;
end;
end;
begin
try
CreateBitMap;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Run Code Online (Sandbox Code Playgroud)
为什么这段代码不能编译?
我正在使用启用了vcl样式的组合框,但是当我运行应用程序时,组合框使用的高亮颜色是窗口高亮颜色而不是vcl样式.
我怎么能解决这个问题,我的意思是在组合框中使用vcl风格的高亮颜色?

我想检查外部应用程序的窗口是否使用窗口的HWND(句柄)可见垂直或水平滚动条,是否存在任何WinApi函数来获取此信息?我真的尝试了这个GetScrollInfo功能,但似乎没有检索有关滚动条可见性的信息.
delphi ×10
c++ ×4
delphi-xe2 ×3
winapi ×3
vcl-styles ×2
c++builder ×1
delphi-2007 ×1
delphi-xe ×1
uxtheme ×1
windows ×1
windows-7 ×1