Delphi中是否有方法检查字符串是否为数字而不引发异常?
它用于int解析.
如果一个人使用,则会引发异常
try
StrToInt(s);
except
//exception handling
end;
Run Code Online (Sandbox Code Playgroud) David对另一个问题的回答显示Delphi DLL函数返回一个WideString.我从没想过如果没有使用它是可能的ShareMem
.
我的测试DLL:
function SomeFunction1: Widestring; stdcall;
begin
Result := 'Hello';
end;
function SomeFunction2(var OutVar: Widestring): BOOL; stdcall;
begin
OutVar := 'Hello';
Result := True;
end;
Run Code Online (Sandbox Code Playgroud)
我的来电计划:
function SomeFunction1: WideString; stdcall; external 'Test.dll';
function SomeFunction2(var OutVar: Widestring): BOOL; stdcall; external 'Test.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
W: WideString;
begin
ShowMessage(SomeFunction1);
SomeFunction2(W);
ShowMessage(W);
end;
Run Code Online (Sandbox Code Playgroud)
它有效,我不明白怎么做.我所知道的约定是Windows API使用的约定,例如Windows GetClassNameW
:
function GetClassNameW(hWnd: HWND; lpClassName: PWideChar; nMaxCount: Integer): Integer; stdcall;
Run Code Online (Sandbox Code Playgroud)
意味着调用者提供缓冲区和最大长度.Windows DLL以长度限制写入该缓冲区.调用者分配和释放内存.
另一种选择是DLL分配内存,例如通过使用LocalAlloc
,并且调用者通过调用释放内存LocalFree
.
内存分配和解除分配如何与我的DLL示例一起使用?"魔法"是否会发生,因为结果是WideString
(BSTR …
我的问题类似于这里的想法:在delphi中替换组件类.
但我需要根据需要更改特定的组件类.
这是一些伪演示代码:
unit Unit1;
TForm1 = class(TForm)
ImageList1: TImageList;
ImageList2: TImageList;
private
ImageList3: TImageList;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ImageList3 := TImageList.Create(Self);
// all instances of TImageList run as usual
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Unit2.MakeSuperImageList(ImageList2);
Unit2.MakeSuperImageList(ImageList3);
// from now on ONLY ImageList2 and ImageList3 are TSuperImageList
// ImageList1 is unchanged
end;
Run Code Online (Sandbox Code Playgroud)
unit Unit2;
type
TSuperImageList = class(Controls.TImageList)
protected
procedure DoDraw(Index: Integer; Canvas: TCanvas; X, Y: Integer;
Style: Cardinal; Enabled: Boolean = True); override;
end; …
Run Code Online (Sandbox Code Playgroud) 我正在我的应用程序中使用私人消息,如下所示:
UM_APP_BASE = WM_APP; // WM_APP is declared as WM_APP = $8000; in "Controls" unit.
Run Code Online (Sandbox Code Playgroud)
然后定义我的私信:
UM_EXPLORER_MSG = UM_APP_BASE + 1;
UM_LICENSE_CHANGE_MSG = UM_APP_BASE + 2;
etc...
Run Code Online (Sandbox Code Playgroud)
在我的课堂上使用它们:
procedure UMLicenseChanged(var Message: TMessage); message UM_LICENSE_CHANGE_MSG;
Run Code Online (Sandbox Code Playgroud)
(我也RegisterWindowMessage
习惯和其他应用程序"交谈"但这是一个不同的故事)
我不记得是什么让我决定使用WM_APP
而不是WM_USER
作为基础.
文档说:
WM_USER常量用于区分保留供Windows使用的消息值和应用程序可用于在私有窗口类中发送消息的值.有五种消息编号范围:
Range Meaning
0 through WM_USER - 1 Messages reserved for use by Windows.
WM_USER through 0x7FFF Integer messages for use by private window classes.
0x8000 through 0xBFFF Messages reserved for future use by Windows.
0xC000 through …
Run Code Online (Sandbox Code Playgroud) 我有图像(500x500),但我需要将其调整为200x200并将其绘制在TImage上.如何实现这样的结果?
注意
我知道Stretch
TImage中的属性,但我想以编程方式调整图像大小.
由于TWebbrowser在IE7兼容模式下运行,我遇到了TWebbrowser的Javascript错误.
有没有办法防止这种情况,只是让它在IE9模式下运行?
我正在实现拖放功能TTreeView
.在OnStartDrag
它的事件上,我正在创建DragOcject
我的派生类:
TTreeDragControlObject = class(TDragObject)
private
FDragImages: TDragImageList;
FText: String;
protected
function GetDragImages: TDragImageList; override;
end;
procedure TfrmMain.tvTreeStartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
DragObject := TTreeDragControlObject.Create;
TTreeDragControlObject(DragObject).FText := tvTree.Selected.Text;
end;
Run Code Online (Sandbox Code Playgroud)
这是我的覆盖GetDragImages
函数DragObcject
:
function TTreeDragControlObject.GetDragImages: TDragImageList;
var
Bmp: TBitmap;
begin
if FDragImages = nil then
begin
FDragImages := TDragImageList.Create(nil);
Bmp := TBitmap.Create;
try
Bmp.Width := Bmp.Canvas.TextWidth(FText) + 25;
Bmp.Height := Bmp.Canvas.TextHeight(FText);
Bmp.Canvas.TextOut(25, 0, FText);
FDragImages.Width := Bmp.Width;
FDragImages.Height := Bmp.Height;
FDragImages.SetDragImage(FDragImages.Add(Bmp, nil), 0, …
Run Code Online (Sandbox Code Playgroud) 我试着这样做SetWindowRgn
,但我做不到.
可以这样做(前2个角是圆形,窗口有阴影)就像这张照片?
delphi ×10
delphi-7 ×3
vcl ×2
c++builder ×1
components ×1
delphi-5 ×1
dll ×1
external ×1
forms ×1
image ×1
ip ×1
messages ×1
region ×1
resize ×1
rounding ×1
shadow ×1
treeview ×1
twebbrowser ×1
widestring ×1
winapi ×1