我有特定一个Delphi形式ClientHeight和ClientWidth和2个板在其上具有一定的宽度和高度.当我调整表单大小时,我希望在运行时自动调整面板的大小.我怎样才能做到这一点?在调整父控件的大小或者我必须对其进行编程时,delphi中是否存在任何内置功能来调整子控件的大小?
我遇到了一个问题,我通常无法改变其属性的背景颜色(例如clwhite).我在Delphi方面不是很有经验,我找到了两种可能的解决方案,但我仍然想知道,如何正确地改变它或为什么它不可能.TToolBarToolBar.Color
1)将样式更改为渐变,但它也会更改按钮的基本动画.
ToolBar.DrawingStyle := dsGradient
ToolBar.GradientStartColor := clWhite
ToolBar.GradientEndColor := clWhite
Run Code Online (Sandbox Code Playgroud)
2)将TToolBar内TPanel使用以下设置.
Panel.Color := clwhite
ToolBar.Parent := Panel
ToolBar.Align := alClient
ToolBar.Transparent := True
Run Code Online (Sandbox Code Playgroud) 有人帮我解决这个错误.
[错误] Unit1.pas(39):运算符不适用于此操作数类型
代码是:
procedure TForm1.Button1Click(Sender: TObject);
var
k: Integer;
broj: Real;
begin
k := StrToInt(Edit1.Text);
if k <= 9 then
broj := k
else
broj := (k + 10) / 2;
if k mod 2 = 0 then
broj := broj / 10
else
broj := broj mod 10; // error line
ShowMessage(FloatToStr(broj));
end;
Run Code Online (Sandbox Code Playgroud) 某些语言(如捷克语或斯洛伐克语)会根据其使用情况更改拼写.但是FormatDateTime没有像SimpleDateFormatJava 那样多的选项,在Java中,您可以在本月的格式化MMMM和独立形式之间切换LLLL.
我正在使用这种表示独立形式30. leden 2019而不是格式化表单的表示法30. ledna 2019.我想应该有一些Windows功能,但我找不到它,我想避免编写自己的库.
FormatDateTime('d. mmmm yyyy', Today);
Run Code Online (Sandbox Code Playgroud) 每当我使用以下结构时,我仍然无法弄清楚如何摆脱有关未初始化变量的警告,即使我知道这种情况永远不会发生.
TCustomEnum = (ceValue1, ceValue2, ceValue3);
function DoSomething(LI_Enum: TCustomEnum): Integer;
var
lNumber : Integer;
begin
case LI_Enum of
ceValue1 : lNumber := 1;
ceValue2 : lNumber := 2;
ceValue3 : lNumber := 3;
end;
Result := 2 * lNumber;
end;
Run Code Online (Sandbox Code Playgroud)
W1036变量'lNumber'可能尚未初始化
我找到了3种解决方案,但我不喜欢它们.特别是有更多的变量或陈述.有没有其他方法可以避免这种情况?
{$WARN USE_BEFORE_DEF OFF}和包裹功能{$WARN USE_BEFORE_DEF ON}else Exit;与Result := 0上开始我一直认为表单生命周期的正确顺序initialization -> Create -> OnCreate -> OnDestroy -> Destroy -> finalization适用于以下代码.
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TUMain, UMain);
Application.Run;
Run Code Online (Sandbox Code Playgroud)
但是当我做一点改变时...
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TUMain, UMain);
if 1 = 2 then
Application.Run;
Run Code Online (Sandbox Code Playgroud)
然后TUMain订购更改initialization -> Create -> OnCreate -> finalization -> OnDestroy -> Destroy
所以我想知道,如何控制确切的订单或至少是什么导致了这种情况的变化?
我在网上找到了一个简单的二进制打包机,我根据自己的需要进行了改动.它运作良好,但我泄漏记忆.
TSprite
type
TSprite=class
public
X:Integer;
Y:Integer;
Width:Integer;
Height:Integer;
Used:Boolean;
Down:TSprite;
Right:TSprite;
constructor Create(X, Y,Width, Height:Integer);
end;
Run Code Online (Sandbox Code Playgroud)
TPacker
type
TPacker=class
public
Root:TSprite;
constructor Create(W,H:Integer; Image : TImage);
destructor Destroy; override;
function Fit(var Blocks:array of TBlock):Boolean;
function FindNode(root:TSprite; W, H:Integer):TSprite;
function SplitNode(Node:Tsprite; W, H:Integer):TSprite;
end;
Run Code Online (Sandbox Code Playgroud)
我这样用它
var Packer:TPacker;
Packer:=TPacker.Create(Width , Height, Image);
Packer.Fit(Blocks);
Boundary(Packer.Root, Image);
for I := Low(Blocks) to High(Blocks) do
begin
if Blocks[I].Fit <> nil then
Draw(Blocks[I].Fit.X,Blocks[I].Fit.Y,Blocks[I].Width,Blocks[I].Height, Image);
end;
LeftRacks:=Report(blocks, packer.Root.Width, packer.Root.Height).Racks;
FillPercent:=Report(blocks, packer.Root.Width, packer.Root.Height).FillPercent;
Packer.Free;
Run Code Online (Sandbox Code Playgroud)
构造函数 TPacker
constructor …Run Code Online (Sandbox Code Playgroud) delphi ×7
delphi-xe6 ×2
autoresize ×1
delphi-7 ×1
delphi-xe2 ×1
memory-leaks ×1
winapi ×1
windows ×1