TColorBox的Bug~~

王集鹄 2003-08-24 11:04:07
现象:
TColorBox::Style属性加上cbCustomColor,运行后选择Custom...跳出颜色对话框~~
选择自定义颜色中未定义的一组,将抛出异常(Delphi6、Delphi7都有)~~

function TCustomColorBox.PickCustomColor: Boolean;
var
LColor: TColor;
begin
with TColorDialog.Create(nil) do
try
LColor := ColorToRGB(TColor(Items.Objects[0]));
Color := LColor;
CustomColors.Text := Format('ColorA=%.8x', [LColor]);
Result := Execute;
if Result then
begin
Items.Objects[0] := TObject(Color); //Color值为-1
Self.Invalidate;
end;
finally
Free;
end;
end;

原因:
function TCustomComboBoxStrings.GetObject(Index: Integer): TObject;
begin
Result := TObject(SendMessage(ComboBox.Handle, CB_GETITEMDATA, Index, 0));
if Longint(Result) = CB_ERR then //ComboBox获取Item的Data时-1正好是错误标识CB_ERR~
Error(SListIndexError, Index);
end;
...全文
53 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
王集鹄 2003-09-11
  • 打赏
  • 举报
回复
unit ufrm_main;
interface
uses
Windows, Controls, Forms,ComCtrls,Classes,StdCtrls;
type
Tfrm_main = class(TForm)
btn_backup: TButton;
ProgressBar: TProgressBar;
procedure btn_backupClick(Sender: TObject);
private
public
end;
var
frm_main: Tfrm_main;
implementation
uses SQLDMO, ComObj;
{$R *.DFM}
type
TBackupSink = class(TInterfacedObject, BackupSink)
private
function PercentComplete(const Message: WideString; Percent: Integer): HResult; stdcall;
function NextMedia(const Message: WideString): HResult; stdcall;
function Complete(const Message: WideString): HResult; stdcall;
end;

function TBackupSink.PercentComplete(const Message: WideString; Percent: Integer): HResult;
begin
frm_main.ProgressBar.Position := Percent;
Result := S_OK;
end;

function TBackupSink.NextMedia(const Message: WideString): HResult;
begin
Result := S_OK;
end;

function TBackupSink.Complete(const Message: WideString): HResult;
begin
Result := S_OK;
end;

Procedure Tfrm_main.btn_backupClick(Sender: TObject);
var
FInterfaceConnection: Integer;
Backup : Variant;
SQL_SERVER : Variant;
begin
SQL_SERVER := CreateOLEObject('SQLDMO.SQLServer');
Backup := CreateOLEObject('SQLDMO.Backup');
Backup.Action := SQLDMOBackup_Database;
Backup.Database := 'test';
Backup.BackupSetName:= 'test';

SQL_SERVER.LoginSecure := False;
// SQL_SERVER.LoginSecure := True; // Win Auth.
SQL_SERVER.login := 'login';
SQL_SERVER.password := 'heslo';
Backup.Files := 'c:\test.bak';

SQL_SERVER.Connect('(local)');

InterfaceConnect(Backup, IID_BackupSink, TBackupSink.Create, FInterfaceConnection);
Backup.SQLBackup (SQL_SERVER);
InterfaceDisconnect(Backup, IID_BackupSink, FInterfaceConnection);
ProgressBar.Position := 0;
end;

end.

王集鹄 2003-08-28
  • 打赏
  • 举报
回复
up#
yoisyois 2003-08-25
  • 打赏
  • 举报
回复
...
sixgj 2003-08-25
  • 打赏
  • 举报
回复
呵呵,一学!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧