尝试使用按钮名称weapon1,weapon2和cancel来使用自定义对话框.但是,当我尝试编译它时,使用此代码将结果显示为未定义错误消息是
[DCC错误] ssClientHost.pas(760):E2003未声明的标识符:'结果'
代码是:
with CreateMessageDialog('Pick What Weapon', mtConfirmation,mbYesNoCancel) do
try
TButton(FindComponent('Yes')).Caption := Weapon1;
TButton(FindComponent('No')).Caption := Weapon2;
Position := poScreenCenter;
Result := ShowModal;
finally
Free;
end;
if buttonSelected = mrYes then ShowMessage('Weapon 1 pressed');
if buttonSelected = mrAll then ShowMessage('Weapon 2 pressed');
if buttonSelected = mrCancel then ShowMessage('Cancel pressed');
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一些复选框,有多少是由查询的recordcount决定的.此外,我需要从上一个位置设置复选框+38的位置.有人给我一些帮助吗?不知道如何创建复选框,剩下的我应该能够做到......无论如何他是我迄今为止所拥有的.
var
i, top,left : integer;
begin
......
left := 81;
top := 119;
while i < qry.RecordCount do
begin
// create check box
// set caption of checkbox to i
// set checkbox loction to left + 38, top
// left = left+38??
end;
Run Code Online (Sandbox Code Playgroud) 说我有一个组合框
apples
apples
pears
oranges
oranges
Run Code Online (Sandbox Code Playgroud)
我想让它显示出来
apples
pears
oranges
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有12个形状
Shape1
Shape2
.....
Shape12
Run Code Online (Sandbox Code Playgroud)
我有12个标签
Label13
Label14
......
Label24
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法编写这样的函数,鼠标在形状上输入会将相应的标签分配给不同的标签,例如Label25:
Label25 :=
OnMouseEnter
shape1 -> label13
shape2 -> label14
...
shape12 -> label24
Run Code Online (Sandbox Code Playgroud)
因此,如果鼠标输入Shape1,Label25将等于Label13,如果鼠标输入Shape2,Label25将等于Label14并继续,直到鼠标输入Shape12 Label25将等于Label24.
我知道我可以写
label25 := labelxx
Run Code Online (Sandbox Code Playgroud)
在每个鼠标输入事件.但是认为标签和形状的名称相对应可以有一种更简单的方式,其中标签#比形状#thetime多12个.
添加建议后,我添加了这个
procedure TFZone1Mod7.ChangeText(sender: TObject);
var
ShapeOrderNo: integer;
FoundComponent: TComponent;
begin
if TryStrToInt(copy(TShape(Sender).Name,6,MaxInt),ShapeOrderNo) then
begin
FoundComponent := FindComponent('label'+inttostr(ShapeOrderNo+12));
if (FoundComponent is TLabel) then
Label25.Caption := TLabel(FoundComponent).Caption
else
showmessage('not found');
end;
showmessage('failed try');
end;
procedure TFZone1Mod7.Shape1MouseEnter(Sender: TObject);
begin
changetext(self);
end;
end.
Run Code Online (Sandbox Code Playgroud)
但每次跑步我都会失败尝试.我发错的信息了吗?
我在表格上有一个按钮.
按钮名称是bmod2,而表单名称是fLayOut1
当用户单击按钮时,我想保存当前表单和按钮名称的名称
procedure TFLayout1.bMod2Click(Sender: TObject);
var
azone : string;
adept : string;
begin
azone := //forum name here
adept := //button name here
end;
Run Code Online (Sandbox Code Playgroud) 假设我有一个名为TMachine的类我目前正在创建一个类
Machine := MachineShape.TMachine.create(self);
Run Code Online (Sandbox Code Playgroud)
但我需要更多的1,从来没有真正确定我需要多少,因为它取决于当时数据库中的机器数量,应该永远不会超过20.所以我知道我需要在var部分中使用某种类型的数组.目前我有
procedure TFLayout1.GetClick(Sender: TObject);
var
machine : TMachine;
begin
.....
//gets number of machines in total
while not fdeptlayout.ADOQuery1.Eof do
begin
fdb.count := fdb.count+1;
fdeptlayout.ADOQuery1.Next;
end;
//restarts back at first query
fdeptlayout.ADOQuery1.First;
//creates the shape
while not fdeptlayout.ADOQuery1.Eof do
begin
machine := MachineShape.TMachine.Create(self);
machine.PlaceShape(44,44,'CM402','first','123/33/123');
fdeptlayout.ADOQuery1.Next;
end;
end;
Run Code Online (Sandbox Code Playgroud)
目前,这将在表格上放置1台机器"Machine".我需要它放置"Machine1""Machine2"...查询中有多少人.因此"machine"需要用数组代替一些怎么样?一切都是在运行时创建的.
我有一个TMachine类,这是一个TShape类
unit MachineShape;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, extctrls,myDataModule,Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TMachine = class(TShape)
private
{ Private declarations }
public
{ Public declarations }
procedure PlaceShape(sizeW,sizeH :integer; name, order,asset : string);
end;
implementation
Procedure TMachine.PlaceShape(sizeW,sizeH :integer; name, order,asset : string);
begin
self.width := sizeW;
self.height := sizeH;
self.top := 136;
self.left := MyDataModule.fDB.LastX +2;//set left
MyDataModule.fDB.lastx := left + sizeW;
end;
end.
Run Code Online (Sandbox Code Playgroud)
我如何为此添加onmouseenter代码?因此,当在运行时添加形状时,它将有自己的鼠标输入代码.这样的东西,我知道这不会工作..但也许它会告诉你我想做什么?因此,当我创建一个TMachine时,我会将名称和编号传递给此过程,它将使onmouseenter过程更新为我发送的名称/编号.
Procedure TMachine.EditMouseEnter(name,number :string);
begin
....onmouseenter(Label2.Caption := name AND label3.caption := Number)...
end
Run Code Online (Sandbox Code Playgroud) 我查询资产编号是否在数据库中,它返回false,因此我想将数据添加到数据库,我没有错误.但它永远不会添加数据.
//check if its there, if so update it, if not add it.
if fdeptlayout.adoquery1.IsEmpty then
begin
showmessage('adding new machine to db');
with Fdeptlayout.ADOQuery1 do
begin
sql.Clear;
sql.BeginUpdate;
sql.add('INSERT INTO MList ');
sql.Add('(Zone,Dept,Number,Name,Asset,IsPanel');
sql.Add(',FinalLocation,Left,Top) ');
sql.Add('VALUES ( :Zone, :Dept, :Number, :Name, :Asset, :IsPanel');
sql.Add(', :FinalLocation, :Left, :Top)');
sql.EndUpdate;
Parameters.ParamByName('Zone').Value := CZone;
Parameters.ParamByName('Dept').Value := CDept;
Parameters.ParamByName('Number').Value := CNumber;
Parameters.ParamByName('Name').Value := CName;
Parameters.ParamByName('Asset').Value := CAsset;
Parameters.ParamByName('IsPanel').Value := CIsPanel;
Parameters.ParamByName('FinalLocation').Value := CFinalLocation;
Parameters.ParamByName('Left').Value := CLeft;
Parameters.ParamByName('Top').Value := CTop;
open;
Run Code Online (Sandbox Code Playgroud) 我不明白如何调整滚动条的范围.说我有
image1 : TImage;一个TScrollingWinControl组件.
现在开始我将range =设置为组件的默认大小,就像这样.
width := Image1.width ;
height := Image1.Height;
HorzScrollBar.Range := Image1.Width;
VertScrollBar.Range := Image1.Height;
Run Code Online (Sandbox Code Playgroud)
到了这里,我相信我很好.一切看起来都不错,没有滚动条会像我想的那样出现.现在我只使图像更大,但组件保持相同的大小像这样.
Image1.height := Image1.Height +100;
Image1.Width := Image1.Width +200;
Run Code Online (Sandbox Code Playgroud)
现在我可以告诉我的图像更大,组件大小相同但滚动条从不显示.所以对于他们来说,我需要设置范围,这让我感到困惑
所以这里是我困惑的地方,我采取image1.height - 组件高度并将其设置为范围?或整个Image1.height和滚动条的范围减去?
我想做的是创建一个如下所示的十六进制网格.

我可以绘制十六进制但不确定如何让他们错开.因此第一行应该是图像中的(0,0)(0,1)(0,2)(0,3),第二行应该是(1,0)(1,1)(1,2)( 1,3)等行中的偶数十六进制总是错开.
目前我知道要使用的行/列数
hexRows
hexColumns
以及我如何绘制十六进制是这样的,i只是在绘制十六进制数时.
DrawSolidHex(x,y,i);
当前代码看起来像这样
begin
hexcolumns := c;
hexrows := r;
i:=1; //first cube
x := 1; //default x,y,z values
y := 1;
z := 0;
while hexrows>0 do
begin
columnssave := hexcolumns ;
while hexcolumns >0 do
begin
DrawSoildHex(X,Y,i);
i:=i+1;
x := x + 1;
hexcolumns := hexcolumns -1;
end;
y:=y+1;
x:= 1;
z:=0;
hexcolumns := columnssave;
hexrows:= hexrows-1;
end;
totalhex := i;
Run Code Online (Sandbox Code Playgroud)
目前使用此代码,它只会在直线上绘制十六进制x,y,(1,1)(2,1)(3,1)...等我不确定如何添加偏移,计算它们和代码所以它会错开行.