小编kob*_*bik的帖子

德尔福是数字

Delphi中是否有方法检查字符串是否为数字而不引发异常?

它用于int解析.

如果一个人使用,则会引发异常

try
  StrToInt(s);
except
  //exception handling
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7

21
推荐指数
4
解决办法
7万
查看次数

为什么Delphi DLL可以在不使用ShareMem的情况下使用WideString?

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 dll widestring

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

根据需要在运行时更改组件类

我的问题类似于这里的想法:在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)

delphi vcl delphi-5

16
推荐指数
2
解决办法
3825
查看次数

如何定义私有基础应用程序消息?

我正在我的应用程序中使用私人消息,如下所示:

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)

delphi winapi messages

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

如何调整图片大小?

我有图像(500x500),但我需要将其调整为200x200并将其绘制在TImage上.如何实现这样的结果?

注意
我知道StretchTImage中的属性,但我想以编程方式调整图像大小.

delphi resize image delphi-7

14
推荐指数
4
解决办法
3万
查看次数

Delphi/C++ Builder的标签编辑器组件

我需要一个用于Delphi或C++ Builder的VCL标签编辑器组件,类似于可用于JavaScript的组件:例如这个,或者这个或StackOverflow自己的标签编辑器.

有这样的东西可用或我需要从头开始吗?

我需要的一些具体事情是:

  • 如果存在比编辑器宽度允许的更多标签,编辑器应允许滚动或变为多行.如果是多线,则应该有一个选项来定义一些最大高度,但要防止它变得太高
  • 选择是否在按空格键或逗号键时创建标记
  • 当编辑器没有聚焦时,在编辑器中提示文本(例如"添加新标签")
  • 理想情况下,您应该能够使用键盘箭头在标签之间移动(突出显示它们),因此您只能使用键盘删除任何标签

delphi components vcl c++builder

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

如何在IE9模式下运行Delphi TWebbrowser组件?

由于TWebbrowser在IE7兼容模式下运行,我遇到了TWebbrowser的Javascript错误.

有没有办法防止这种情况,只是让它在IE9模式下运行?

delphi twebbrowser

13
推荐指数
3
解决办法
1万
查看次数

拖动节点时TTreeView选择毛刺

我正在实现拖放功能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)

delphi treeview drag-and-drop delphi-7

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

如何在Delphi中获取外部(公共)IP

我需要从Delphi获取我的外部(公共)IP地址.

例如,www.whatismyip.com显示的相同IP .

我怎样才能做到这一点 ?Winsock不允许这样做.

delphi ip external

11
推荐指数
3
解决办法
1万
查看次数

带有系统阴影的圆形表格

我试着这样做SetWindowRgn,但我做不到.

可以这样做(前2个角是圆形,窗口有阴影)就像这张照片?

在此输入图像描述

forms delphi rounding shadow region

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