我正在实现拖放功能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) 我有我的自定义类扩展TEdit:
TMyTextEdit = class (TEdit)
private
fFocusNextOnEnter: Boolean;
public
procedure KeyUp(var Key: Word; Shift :TShiftState); override;
published
property FocusNextOnExnter: Boolean read fFocusNextOnEnter
write fFocusNextOnEnter default false;
end;
Run Code Online (Sandbox Code Playgroud)
在KeyUp程序中我做:
procedure TMyTextEdit.KeyUp(var Key: Word; Shift: TShiftState);
begin
inherited;
if FocusNextOnExnter then
if Key = VK_RETURN then
SelectNext(Self as TWinControl, True, false);
end;
Run Code Online (Sandbox Code Playgroud)
但它没有将焦点转移到下一个控制.我试过了
if Key = VK_RETURN then
Key := VK_TAB;
Run Code Online (Sandbox Code Playgroud)
但它也没有用.我错过了什么?
我有一个带布尔属性的简单组件类:
TmyClass = class(TComponent)
private
fSomeProperty: boolean;
published
property SomeProperty: boolean
read fSomeProperty
write fSomeProperty
default true;
end;
Run Code Online (Sandbox Code Playgroud)
我把它放在我的表单上,将其设置为true(SomeProperty设置为false,为什么?),但是当我尝试从运行时访问SomeProperty时它会给我错误.为什么会这样?
我的自定义类女巫来自TButton:
TLoginResultEvent = procedure (Sender: TObject; LoginResult: boolean) of object;
TLoginButton = class(TButton)
private
fLogin: TLoginChooser;
fOnClick: TLoginResultEvent;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure OnClickResult(Sender: TObject; LoginResult: boolean);
published
property Login: TLoginChooser read fLogin write fLogin;
property OnClick: TLoginResultEvent read fOnClick write fOnClick;
end;
Run Code Online (Sandbox Code Playgroud)
在构造函数中我添加了:
constructor TLoginButton.Create(AOwner: TComponent);
begin
inherited;
fOnClick := OnClick;
OnClick := OnClickResult;
end;
Run Code Online (Sandbox Code Playgroud)
但是当我点击按钮时它没有触发OnClickResult,我做错了什么?是否可以"覆盖"OnClick事件处理程序,还是应该隐藏它并制作示例OnResultClick事件?
我有一个TDateTime值(我得到的结果EndOfTheMonth(date))变量类型.结果错误地四舍五入.我们来看看例子:
data := EndOfTheMonth(date);
V := data;
ShowMessage(DateTimeToStr(data) + ' vs ' + VarToStr(V));
// output is
// data = 2012-01-31 23:59:59
// v = 2012-02-01 // why next day?
Run Code Online (Sandbox Code Playgroud)
它是设计行为吗?如何解决这个问题?
我正在StartDrag上创建自定义DragObject的实例:
procedure TForm1.GridStartDrag(Sender: TObject;
var DragObject: TDragObject);
begin
DragObject := TMyDragControlObject.Create(Sender as TcxGridSite);
end;
Run Code Online (Sandbox Code Playgroud)
最近在DragOver上的另一个网格上:
procedure TForm1.SecondGridDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := False;
if Source is TMyDragControlObject then
with TMyDragControlObject(Source) do
// using TcxGrid
if (Control is TcxGridSite) or (Control is TcxGrid) then begin
Accept := True
// checking the record value on grid
// the label of drag cursor will be different
// getting the record value works fine!
if RecordOnGrid.Value …Run Code Online (Sandbox Code Playgroud) 如何强制TIdHttp.post方法返回以utf-8编码的网页?我试过http.Request.ContentEncoding := 'UTF-8'但它没用.这是我的代码:
procedure TeUpdateNews.Check;
var url: string;
Http: TIdHttp;
SS: TStringStream;
param: TStringList;
SWIDESTRING: WideString;
begin
http := TIDHttp.Create(nil);
http.HandleRedirects := true;
http.ReadTimeout := 5000;
http.Request.ContentEncoding := 'UTF-8';
param := TStringList.create;
param.Clear;
url := CONST_SOME_WWW;
try
SS := TStringStream.Create;
try
SWIDESTRING := http.Post(url, param);
// it's not getting utf-8!
ShowMessage(SWIDESTRING);
finally
SS.Free;
param.free;
end;
finally
Http.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我正在尝试手动保存优化程序计划以进行进一步分析,如下所示:
do $$
declare
tmp text;
begin
explain
select * from public.some_table where 1=2 into tmp;
insert into public.plans(plan) values (tmp);
end; $$
Run Code Online (Sandbox Code Playgroud)
但是当我稍后选择它时,我看到它只从explain语句中保存了第一行:
Result (cost=0.00..82.97 rows=1 width=114)
Run Code Online (Sandbox Code Playgroud)
如何保存整个计划呢?
关于Delphi中的代码混淆,我应该知道些什么?
我应该或不应该这样做?
它是如何完成的,是否有任何好的工具(商业/免费)自动化它?
delphi ×9
delphi-2010 ×6
delphi-xe2 ×2
datetime ×1
delphi-7 ×1
draggable ×1
explain ×1
indy ×1
obfuscation ×1
postgresql ×1
rounding ×1
sql ×1
tcxgrid ×1
treeview ×1
variant ×1