uniGUI之事项合集

article/2025/9/24 10:16:52

目录
1.事件中的代码在服务器端和客户端,哪一端执行?
2.为什么UniGUI控件在IE中显示的字体会变小、模糊?
3.在浏览器端不能使用ShowMessage()
4.unigui程序只显示loading
5.uniGUI执行程序部署有3种形式
6.在UniGUI里使用ADO的设置
7.MainModule怎样得到js变量的值
8.TUniServerModule和TUniMainModule模块区别
9.MainModule里一般放什么,ServerModule一般放什么?
10.主窗体的标题怎么去掉
11.用ExtEvent打开链接和下载文件
12.WebApplication显示对话框
13.Uni中的UniChart的Series增删
14.怎样给每一个在线用户建立一套变量,在用户断开后立即清除
15.TUniHiddenPanel的作用
16.uniGUI实现Excel的导出
17.Send File()应用
18.UniGUI的Canvas使用
19.动态生成 TUniTabSheet和Frame
20.UniGUI中如果获得Session情况
21.uniGUI 通过SessionList操作另外的登录用户
22.UniGUI如何禁止关闭新窗口
23.UniGUI中Cookies使用中文汉字的方法
24.UniGUI如何实现压缩传输数据?
25.UniGUI TreeView处理
26.UniGUI 设置超时
27.从ASP网站登录到UniGUI中
28 UniGUI数据库初始化要放到MainModule里
30.写js的注意
31.JS,Jquery获取各种屏幕的宽度和高度
32.uniGUI动态建立Form及释放
32.uniGUI经验两则 uniTimer uniHtmlFrame
33.UniGUI的TUniLoginForm窗口自定义背景色
34.UniDBGrid选择字段Boolean处理
35.如何打开URL
36.事件操作时,如果出现等待效果
37.UniImage可以嵌入PNG图片


1.事件中的代码在服务器端和客户端,哪一端执行?

代码如下:

for i:=0 to 20 do
beginif Frm[i]<>nil thenif Frm[I].Name=ProCaption thenbeginBaesFrame := Frm[i];IsOpen := True;Break;end;
end;
if IsOpen then exit;

为什么这段代码是在服务器端执行,而不是在客户端执行呢?
解答: UniGUI的运行机制就是除非你在ClientEvents里的东西,其他都是要由UniGUI通过后台程序执行完成后解析成js发回客户端浏览器显示。

2.为什么UniGUI控件在IE中显示的字体会变小、模糊?

字体修改UniSessionModule的CustomCSS的内容:

/* ---------------------------修改 Ext CSS -------------------------- */
/* Ext 2.0 */
.x-window-footer {position: relative;top: 0;right: 0;
}
.x-tab-strip SPAN.x-tab-strip-text {font-size: 13px;
}
.x-panel-header {font-size: 13px;
}
.x-tree-node {font-size: 13px;
}
.x-grid3-hd-row TD {font-size: 13px;
}
.x-grid3-row TD {font-size: 13px;LINE-HEIGHT: 18px;
}
.x-tip .x-tip-bd {font-size: 13px;
}
.x-tip h3 {font-size: 13px;
}
.x-tip .x-tip-bd-inner {font-size: 13px;
}
.x-panel-t1 .x-panel-header {FONT: normal 13px tahoma,arial,verdana,sans-serif;
}
.x-form-field {FONT: 13px tahoma,arial,helvetica,sans-serif;
}
.x-small-editor .x-form-field {FONT: 13px tahoma,arial,helvetica,sans-serif;
}
.x-combo-list-item {FONT: 13px tahoma,arial,helvetica,sans-serif;
}
.x-btn button,x-toolbar .x-item {FONT: 13px tahoma,arial,sans-serif;
}
.x-menu-list-item {FONT: 13px tahoma,arial,sans-serif;
}
.x-window-t1 .x-window-header {FONT: bold 13px tahoma,arial,verdana,sans-serif;
}
.x-layout-split-west .x-layout-mini {BACKGROUND-IMAGE: url(../images/mini-left.jpg);
}
.x-form-text {Margin-top:1px;
}/* the textField missing bottom line */
.x-form-item {FONT: 13px tahoma,arial,helvetica,sans-serif;
}
.x-grid-group-hd DIV {FONT: bold 13px tahoma,arial,helvetica,sans-serif;
}/*按钮字体大小 Add by extjs.org.cn */
.x-btn-text {Font: 12px tahoma,arial,sans-serif;
}
/* END */

3.在浏览器端不能使用ShowMessage()

function ShowMsg(AskString: String): Boolean;
beginif MainForm.WebMode then//must uses UniGUIApplication
UniSession.AddJS(alert(‘’’+AskString+’’’);)
elseShowMessage(AskString);
end;

在浏览器执行不可用ShowMessage

4.unigui程序只显示loading

uniGUI以后发布要分别带上extjs和uni的两个js文件夹,这两个文件夹的具体位置要在UniServerModule模块中指定以下两个属性:
UniServerModule.UniRoot 代表uni的js及资源文件夹目录,即uni-0.94.0.1024目录中的文件,如果属性值为: [uni]\ ,则程序运行时会到uniGui的安装目录下去寻找
UniServerModule.ExtRoot 代表extjs的js及资源文件夹目录,即ext-4.2.1.883目录中的文件,如果属性值为:[ext]\ ,则程序运行时会到uniGUI的安装目录下去寻找

procedure TUniServerModule.UniGUIServerModuleBeforeInit(Sender: TObject);
beginSelf.ExtRoot := 'ext-7.4.0';Self.UniRoot := 'uni-1.90.0.1555';
end;

这样,在程序编译调试时,就无需要每个uniGUI工程的exe文件下添加uni_94和ext_42这两个目录文件,程序会到unigui的安装目录中去寻找。而程序布署后,由于布署后主程序目录下有ext_42目录,就可以将uniRoot和ExtRoot两个属性动态设置为我们布署时设置的文件夹名。

5.uniGUI执行程序部署有3种形式

1.ISAPI模式
部署在IIS或Apache,程序编译为Dll形式,没有试,准备后续专门测试一下。

2.标准执行文件模式
将软件编译成一个独立的Exe文件,包括了WEB服务和业务内容,是uniGUI部署方式中最简单的一种。该方式最大特点是可以进行代码跟踪,同一般exe程序调试一样,在Debug模式下程序调试非常方便。运行exe后就可以直接打开页面进行测试,通过任务栏上的图标可以打开服务监控页面,监控服务程序的运行情况,如下图:
3.Windows服务模式
将软件编译成Windows下的Service模式,并自动启动。从工程文件上看,与一般的程序工程文件略有差异,这里不详述。另外工程中增加了一个ServiceModule.pas文件和对应的窗体文件,该模块单元定义了Windows Service的一些属性,包括名称、依赖等,我只修改了DisplayName属性,其他属性都采用缺省。
特别需要注意的是:不要尝试修改该文件的文件名和模块类名,否则系统无法识别,编译能通过,但运行时报无法启动,估计是内部代码上写死了。
注册Service的方式同一般的Windows Service程序,通过命令行加 –install参数,注销用 –uninstall参数,如下:
MyServiceApp –install
MyServiceApp -uninstall
启动用命令行,如下:
net start UniServiceModule
UniServiceModule就是模块的类名不要前缀T


在实际应用中,我采用了2个工程,一个是标准执行文件模式,Debug+Win32,用于程序调试,另外一个工程采用Windows Service模式,Release + Win64,用于部署运行。在少量客户端(<5个)情况下,运行效果非常不错,我打开一个2万条记录的表,按照50条/页进行分页显示,从数据获取到第一页数据展示,本地大约在3~4秒之间,云服务器(带宽 10M,实际检测复制文件时<200KByte/秒)上大约在6~7秒,获取第二页数据大约需要1秒。

最关心的是该服务程序在较多客户终端(300~500个)情况下的性能,按照作者的话说是不取决于程序,而取决于服务器硬件条件。拟在近期用WinRunner做个测试,看看具体效果,主要是ISAPI 和 Windows Service两种模式的性能。

6.在UniGUI里使用ADO的设置

UniServerModule 设置 AutoCoInitialize 为 True
在这里插入图片描述

7.MainModule怎样得到js变量的值

MainForm.UniTrackBar1.SetValue(Sender.Field.GetValue());

8.TUniServerModule和TUniMainModule模块区别

TUniServerModule 一个连接创建一个
TUniMainModule 只创建一个作为共用
TUniServerModule 所有客户端公用
TUniMainModule 你的连接使用

可以描述如下:
TUniServerModule,只有一個是公用,若用連接池在此建立,在此定義變量是公用
TUniMainModule,一個user一個,在此放資料庫控件是各user獨立,
TUniMainModule之public定義之變量是user單獨用

9.MainModule里一般放什么,ServerModule一般放什么?

如果用到数据库,ADOConnection1、ADOQuery1、DataSource1要放到MainModule

10.主窗体的标题怎么去掉

可以在UniServerModule里设置主窗体的显示模式,属性MainFormDisplayMode:
mfPage: 主窗体无边框
mfWindows: 标准窗体,有边框

11.用ExtEvent打开链接和下载文件

在这里插入图片描述
这个设置可以实现打开链接,如果是文件就是下载了

12.WebApplication显示对话框

Application.MessageBox 不可以,要用WebApplication 不要用Application

13.Uni中的UniChart的Series增删

UniChart似乎不能动态增加Series,没有AddSeries()方法,所以只能提前多建立几个,然后隐藏即可。再或者,考虑再画布上画。这个没试过。

14.怎样给每一个在线用户建立一套变量,在用户断开后立即清除

Demo里的Session例子,似乎只讲了TimeOut,其余怎么处理?
另外,类似于隐藏域,用不可见的Label可以吗?
User之私有变量,请定义在MainModule的Public

public
{ Public Declarations }
LocalCacheURL: String;
LocalCachePath: String;
StartPath: String;
ExtFullPath: String;
ServerRoot: String;
ServerIni: String;
StartFlagMainDm: Boolean;
User,Test: String;
Comp: array of TComponent;
CompCount: Integer;

全域变量的意思:User1, User2, User3看到值是一样的。

15.TUniHiddenPanel的作用

在Form上放一个TUniHiddenPanel,放上的元件是隐藏的,TUniHiddenPanel的可视化元件是有,但执行时看不到,类似ASP里的隐藏域,HTML的Hidden

16.uniGUI实现Excel的导出

多种方法,推荐用TMS FlexCel读写速度块,并且不需要安装Excel就可执行

uses
FlexCel.XlsAdapter,VCL.FlexCel.Core;//函数:
procedure TfmExport.saveToExcel(xls: TExcelFile);
{导出到EXCEL功能函数}
varrowCount, colCount, i, j: Integer;tempFile, destPath, destFile: string;
beginif not UniMainModule().qry_exprot.Active thenbeginUniSweetAlert1.Title := '请先查询!';UniSweetAlert1.Show();exit;end;if UniMainModule().qry_exprot.RecordCount < 1 thenbeginUniSweetAlert1.Title := '没有记录,取消导出!!';UniSweetAlert1.Show();exit;end;xls.NewFile(1); //创建一个excel表格sheetUniMainModule().qry_exprot.First; //定位到第一条记录rowCount := UniMainModule().qry_exprot.RecordCount; //获取记录数colCount := UniMainModule().qry_exprot.FieldCount;   //获取字段列数//写列头i := 1; //定位到第一行for j := 1 to colCount dobegin                              //UniMainModule().qry_exprot.Fields.FieldByNumber(j).FieldNamexls.SetCellValue(i, j, TCellValue.Create(DBData.Columns[j - 1].Title.Caption));end;//写数据i := 2; //第二行开始while not UniMainModule().qry_exprot.Eof dobeginfor j := 1 to colCount dobeginxls.SetCellValue(i, j, TCellValue.Create(UniMainModule().qry_exprot.Fields.FieldByNumber(j).AsString));end;UniMainModule().qry_exprot.Next;i := i + 1;end;xls.PrintLandscape := true;tempFile := 'exportdata.xlsx'; //临时文件名destPath := UniServerModule().FilesFolder + '\excelfile\';if not DirectoryExists(destPath) thenbeginForceDirectories(PChar(destPath));end;destFile := destPath + '\' + tempFile;if FileExists(destFile) thenbegindeletefile(destFile);end;xls.Save(destFile); //保存表格到服务器端的临时目录UniSession.SendFile(destFile); //下载表格到本地浏览器默认的目录
end;//调用
procedure TfmExport.lblExportClick(Sender: TObject);
varxls: TExcelFile;
beginxls := TXlsFile.Create;trysaveToExcel(xls); //调用自定义功能函数finallyxls.Free;end;
end;

17.Send File()应用

UniSession.SendFile() 下载至Client端存档,这里面的参数是什么?
//前端下载 Fn是档名 (Server端档案,Client端档名)

UniSession.SendFile(MainSm.LocalCachePath+Fn, Fn)
//或者
LabDownLoad.Caption :=<a href=”’+UniServerModule.TempFolderURL+FName+’”target=new>Click here to download: (+FName+)</a>;

18.UniGUI的Canvas使用

Procedure TMainForm.UniImage1MouseUp(Sender: TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:Integer);
beginUniImage1.Picture.Bitmap.Canvas.Pen.Width := 1;UniImage1.Picture.Bitmap.Transparent := True;if Button=mbLeft thenbegin
if x0=’’ then
beginx0 := IntToStr(x);y0 := IntToStr(y);UniLabel2.Caption := x0+,+y0+,;
end
else beginUniImage1.Picture.Bitmap.Canvas.MoveTo(StrToInt(x0), StrToInt(y0));x0 := IntToStr(x);y0 := IntToStr(y);UniLabel2.Caption := UniLabel2.Caption+x0+,+y0+,;
end;end;
end;

19.动态生成 TUniTabSheet和Frame

procedure TMainForm.openPage(pageName: string; pageCaption: string; pageControl: TUniPageControl; newFrame: TUniFrame);
{
参数说明
pageName:页面名称
pageCaption:新建UniTabSheet的Caption
pageControl:UniPageControl的控件名
newFrame:要新建的UniFrame的名字
}
varnewTabSheet: TUniTabSheet;Err: string;
beginErr := '';newTabSheet := nil;
//查找是否已经存在要创建的页面newTabSheet := TUniTabSheet(pageControl.FindChildControl(pageName));if not Assigned(newTabSheet) thenbeginnewTabSheet := TUniTabSheet.Create(Self); //创建一个sheet新页面newTabSheet.PageControl := pageControl; //新sheet页面放到pageControl下newTabSheet.Name := pageName; //设置新页面名字newTabSheet.Caption := pageCaption; //设置新页面Caption页眉内容newTabSheet.Closable := true; //设置新页面可一个关闭newFrame.Parent := newTabSheet; //将新Frame放到新创建的页面上newFrame.Align := alClient; //新Frame在新页面上居中显示end;pageControl.ActivePage := newTabSheet; //激活新页面end;

20.UniGUI中如果获得Session情况

在ServerModule单元中有如下属性,可以使用

ServerModule.UniServerModule.ServerStats.ActiveSessions
ServerModule.UniServerModule.ServerStats.MaxSessions 【最大会话】
ServerModule.UniServerModule.ServerStats.BytesSent
ServerModule.UniServerModule.ServerStats.BytesReceived

21.uniGUI 通过SessionList操作另外的登录用户

参照bbs,写了这个方法,检查是否有同名用户已经登录:

procedure TUniMainModule.CheckSameUser(aUserLoginCode: string);
varASessionList: TList;I: Integer;M: TUniMainModule;USession: TUniGUISession;
beginUniServerModule.SessionManager.Sessions.Lock;tryASessionList := UniServerModule.SessionManager.Sessions.SessionList;for I := 0 to ASessionList.Count - 1 dobeginUSession := TUniGUISession(ASessionList[I]);M := USession.UniMainModule as TUniMainModule;if M.UserLoginCode = aUserLoginCode then//这里UserLoginCode是在MainModule中定义的一公共变量,用来保存用户登录代码,标示用户身份.beginM.ExitFlag:=True;  //ExitFlag也是在MainModule中定义的公共变量,表示是否退出.USession.TerminateAfterSecs(10);Break;end;end;finallyUniServerModule.SessionManager.Sessions.Unlock;end;
end;

22.UniGUI如何禁止关闭新窗口

1.取消新窗口的SystemMenu,目的是去掉窗体的关闭按钮
2. 在窗体加上新按钮,点击事件为 Close;
3. 在窗体的OnClose事件中添加如下代码:
Action := CaNone; //这句一定要放在MessageDlg前面
MessageDlg(xxxxx);

23.UniGUI中Cookies使用中文汉字的方法

在目前的UniGUI(ver:0.88)中使用UniApplication.Cookies.SetCookie来设置一个中文的Cookies时,然后用UniApplication.Cookies.Values来读取Cookies值时,中文会变成乱码。查询UniGUI论坛,得到如下解决方案:

procedure TMainForm.UniButton1Click(Sender: TObject);
var UserName: String;
begin//使用EncodeString函数编码UniApplication.Cookies.SetCookie(‘name’, EncodeString(‘中文汉字’));//使用DecodeString解码UserName := DecodeString(UniApplication.Cookies.Values[‘name’]);
end;

24.UniGUI如何实现压缩传输数据?

TUniServerModule类中有一个属性是控制压缩的,要以设置是否压缩和压缩级别,最小数据尺寸。
一般按以下设置就可以了:

ServerModule.Compression.Enabled := True;
ServerModule.Compression.Level := zcMax;

25.UniGUI TreeView处理

1)节点处理

procedure TFrameTree.ExpandTree(PNode: TUniTreeNode);
var Str, DirName: String; Qry: TAdoQuery; DirID,Fid: Integer; Node: TUniTreeNode;
begin//展开父节点Fid := GetDirID(FNode);Str := ‘select * from DocDir where Del=0 and fid=+IntToStr(Fid);Qry := dm.CreateQuery;Qry.SQL.Add(Str);Qry.Open;while not Qry.Eof dobeginDirName := Qry.FieldByName(‘Name’).AsString;DirID := Qry.FieldByName(‘ID’).AsString;
Node := AddNodeById(DirID, DirName, FNode);//递归
ExpandTree(Node);
Qry.Next;end;Qry.Free;
end;
//不要一次全加,点击一个节点,才加载当前的。

2)ReadOnly设置
如果设置了js(显示CheckBox),是否ReadOnly不能设置了。之前有代码设置后,就异常。

26.UniGUI 设置超时

AjaxTimeOut,建议60000
SessionTimeOut,建议900000

27.从ASP网站登录到UniGUI中

<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312” />
</head>
<form action=”http://网址’ method=”post” id=”id” name=”id”>
<input name=”username” value=”test” type=”hidden” />
<input name=”userpwd” value=”test” type=”hidden” />
<a href=”#” onclick=”id.submit()>提交</a>
</form>

获取:
UniApplication.Parameters.Values[‘UserName’]
UniApplication.Parameters.Values[‘UserPwd’]

28 UniGUI数据库初始化要放到MainModule里

数据库初始化要放到MainModule里,不可以放到ServerModule,否则,不同用户用同一个数据库连接,操作会相互干扰。
UniServerModule的AutoCoInitialize属性设置为True

29.UniGUI组件中的Client JavaScript Delphi组件之间的操作
UniGUI组件中Client、JavaScript、Delphi组件之间的操作:

1)UniLabel组件

function OnClick(Sender,e)
{MainForm.UniLabel1.setText(‘Click!);
}
function OnMouseMove(Sender,x,y)
{MainForm.UniEdit1.setPositon(x,y);
}

2)UniButton组件

function OnMouseOut(Sender,e)
{Sender.setText(‘Out’);
}

3)UniEdit组件

function form.OnMouseMove(Sender,x,y)
{MainForm.UniEdit1.setValue(x+:+y);ss=MainForm.UniEdit1.getValue();
}

30.写js的注意

写js要注意 \ 都是要两个
特殊符号 \n 要改为 \n 才能正常
要显示 \ 原应该为 \ 要改为 \\

31.JS,Jquery获取各种屏幕的宽度和高度

网页可见区域宽:document.body.clientWidth 
网页可见区域高:document.body.clientHeight 
网页可见区域宽:document.body.offsetWidth (包括边线的宽) 
网页可见区域高:document.body.offsetHeight (包括边线的宽) 
网页正文全文宽:document.body.scrollWidth 
网页正文全文高:document.body.scrollHeight 
网页被卷去的高:document.body.scrollTop 
网页被卷去的左:document.body.scrollLeft 
网页正文部分上:window.screenTop 
网页正文部分左:window.screenLeft 
屏幕分辨率的高:window.screen.height 
屏幕分辨率的宽:window.screen.width 
屏幕可用工作区高度:window.screen.availHeight 
屏幕可用工作区宽度:window.screen.availWidth 
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth 
scrollHeight: 获取对象的滚动高度。 
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离 
scrollWidth:获取对象的滚动宽度 
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度 
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 
event.clientX 相对文档的水平座标 
event.clientY 相对文档的垂直座标 
event.offsetX 相对容器的水平坐标 
event.offsetY 相对容器的垂直坐标 
document.documentElement.scrollTop 垂直方向滚动的值 
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量 

32.uniGUI动态建立Form及释放

用uniGUI开发的项目中,难免要遇到动态建立一个Form,再释放掉,与传统Delphi项目不一样,这是从forum转贴过来的,要这样写:

//建立方法
if Frm = nil then
Frm := TUniForm1.Create(UniApplication);//调用及释放方法
Frm.ShowModal( 
Procedure(Sender: TComponent; AResult:Integer) 
begin
//Frm := nil;//作者这样写的
FreeAndNil(Frm);//应这样写.
end );

32.uniGUI经验两则 uniTimer uniHtmlFrame

1.uniTimer的妙用

很多时候,都会遇到在一个uniForm或者uniFrame加载完后,执行一个具体的动用,比如执行一个查询,当这个动作是调用第三方JS显示库时,如调用百度的ECharts,显示一个分析图,在OnCreate、OnShow、OnFramedLoaded事件都不能显示这个动作的结果。这时候,利用uniTimer来执行,是最好的方法。

2.uniHtmlFrame

看名称就知道是显示html内容的Frame,但遇到不显示html内容的时候,百试不得其解,将同样一个HtmlFrame放到不同的uniFrame上,有的显示,有的不显示。
最后发现当不显示的时候,把uniHtmlFrame.StaticHtml=True解决。

33.UniGUI的TUniLoginForm窗口自定义背景色

uniGUI的TUniLoginForm类创建的登录窗口默认是不带颜色,可以自定义css风格来改变背景颜色。
一般是通过在UniServerModule中,在CustcomSS属性中,修改extjs的css定义来实现,修改登录窗口的背景颜色可以修改 的定义来实现,如:

.x-body{  
background-color: rgb(11, 80, 184);  
margin: 0;  
}

类似的,还可以给UniLoginForm的背景添加上背景图案等个性化的风格。

34.UniDBGrid选择字段Boolean处理

Columns下某字段设置为CheckBok
属性:CheckBoxField
FieldValues: 存储的值 [1;0]
DisplayValues: 显示的内容 [是;否] 【如何做到只显示勾项,可以在这里设置为: ; 单个字符即可】
BooleanFieldOnly: 如果True,则要求字段为Boolean类型

35.如何打开URL

1)UniSession.BrowserWindow;
UniSession.BrowserWindow(‘http://www.baidu.com’, 800, 600, ‘’, [bwResizable,bwStatus]);
2)使用AddJS方法;
UniSession.AddJS(‘window.open (’+‘’‘’+str+‘’‘’+‘, ‘‘newwindow’’)’);
3)用HtmlFrame窗口,将代码封装进去。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">   
<html>   <head>   <title>某单据打印</title>   <meta http-equiv="Content-Type" content="text/html; charset=GBK" />   </head>   <body>   <iframe id="reportFrame" width="900" height="400" src="http://localhost:8075/WebReport/ReportServer?reportlet=djjj%2Fv_RS_CostApply_1.cpt&BillNo=RSCA160315091149450001"></iframe>   </body>   
</html>

36.事件操作时,如果出现等待效果

使用控件UniScreenMask,设置TargetControl父类控件,设置AttachedControl具体控制的控件。
可以在DisplayMessage里设置等待的中文说明字样。

37.UniImage可以嵌入PNG图片

如果使用自带的Image图片导入后效果为底色黑色,就改用URL传入模式。
UniImage1.Url := ‘http://’+g_ServerIP+‘:’+g_ServerPort+‘/pic/flowinit_arrow_right.png’;


http://chatgpt.dhexx.cn/article/sv2rcUL3.shtml

相关文章

【一起学UniGUI】--UniGUI介绍(1)

【前言】&#xff1a;Delphi目前已不是主流开发工具&#xff0c;这是事实&#xff01;但不能抹杀它曾经的辉煌。其实不管是哪个语言或哪个开发工具&#xff0c;其实它们仅仅是一个开发工具而已。再好的语言或开发工具&#xff0c;最终仍是要看使用者撑握的水平。相对于大部分来…

UniGUI 后台管理系统框架

TOC](UniGUI 管理系统框架) UniGUI 确实是D的网站开发利器&#xff0c;熟悉D的同学很快就能上手&#xff0c; 除了界面美化需要一部分css外。 已经实现的功能&#xff1a; 免密登录 平台和供应商多组织架构 表格导出到Excel PDF报表内嵌图片 邮件任务通知 格式图表

Delphi B/S WEB 应用开发ExtJS组件《uniGUI中文手册》第3版(一):uniGUI简介

uniGUI是Embarcadero Delphi和C Builder的Web应用程序框架。uniGUI具有用于开发有状态Web应用程序&#xff08;即SPA&#xff09;的全套可视控件。开发过程与开发常规VCL应用程序非常相似。uniGUI Web应用程序可以直接在RAD Studio Delphi IDE中运行和调试&#xff0c;这使开发…

如何找项目写到简历中

对于每一个求职者&#xff0c;简历是每个人找工作的第一步&#xff0c;要想有很多的面试机会&#xff0c;必须将我们的简历制作的“漂亮”一些&#xff0c;我这说的漂亮并不是花里胡哨的简历&#xff0c;而是项目经验这块必须丰富一点&#xff0c;这块是简历中的核心&#xff0…

java简历包装项目经验,项目实战

目录 部分内容展示 深入浅出索引&#xff08;上&#xff09; 索引的常见模型InnoDB 的索引模型索引维护小结 深入浅出索引&#xff08;下&#xff09; 覆盖索引最左前缀原则索引下推 为什么这些SQL语句逻辑相同&#xff0c;性能却差异巨大&#xff1f; 案例一&#xff1a;条…

哪些项目适合写进Java程序员面试简历?推荐这10类

临近毕业&#xff0c;有很多小伙伴会问&#xff0c;我要去面试了&#xff0c;但目前没有做过什么项目&#xff0c;有没有推荐的项目&#xff1f;今天小编给大家推荐几个适合写在简历里的项目。 如果你是没有做过项目的小白&#xff0c;那么建议你去跟着项目视频学习&#xff0…

java简历项目经验描述,分分钟搞定!

我整理的spring学习笔记&#xff1a; 像spring这种知识点我们不能盲目的学习&#xff0c;首先我们得有一套学习路线&#xff0c;我总结了一套spring的学习思维导图&#xff0c;今天通过我整理的Spring学习路线.xmind给大家分析spring需要掌握的一些核心知识点。 spring的特点&…

java项目介绍项目收获_java项目收获总结

2017年java项目收获总结 作为培训,项目的好坏对培训质量的影响十分大,常常是决定性的作用。下面是YJBYS小编整理的java项目收获总结范文&#xff0c;希望对你有帮助! 2017年java项目收获总结一 从二十几天前的项目需求分析&#xff0c;到数据库设计&#xff0c;到后来的界面设计…

java程序员简历项目经验_程序员简历中的项目经验怎么写

程序员简历项目经验范文一 项目&#xff1a;河北省风电监控系统 时间&#xff1a;2014—2015 开发环境&#xff1a;windowseclipsetomcatoracle 框架&#xff1a;springspringmvchibernate 插件&#xff1a;jquery&#xff0c;raphael,highcharts,validate, 个人主要工作内容&a…

java工程师简历项目经验

开头 在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了… redis了解吗?你说说怎么用redis实现分布式锁? Redis常用数据结构及底层数据结…

可以写在简历上的22个轻松上手的Java经典项目教程(含源码and笔记)

前言 很多朋友投简历的时候会尴尬的发现自己并没有独立写过什么拿得出手的项目&#xff0c;有些朋友甚至压根还没有写过项目。呐&#xff0c;众所周知&#xff0c;程序员的项目经历是非常重要的评判标准。 所以本篇文章给大家总结了22个完整的开源项目&#xff0c;包括教程、…

【Java项目推荐】值得写到简历上的项目--黑马点评

优惠卷秒杀 前言优惠券秒杀实现优惠券秒杀下单超卖问题一人一单分布式锁redis中加锁的一些特殊情况手动实现分布式锁分布式锁误删情况1分布式锁误删情况2lua脚本解决多条命令的原子性问题Redisson 秒杀优化异步秒杀思路基于redis完成秒杀资格判断基于阻塞队列实现异步下单总结 …

万字长文了解免疫算法原理 及求解复杂约束问题(源码实现)

免疫算法理论 生物免疫系统是-一个复杂的自适应系统。免疫系统能够识别出病原体&#xff0c;具有学习、记忆和模式识别能力,因此可以借鉴其信息处理机制来解决科学和工程问题。免疫算法正是基于生物免疫系统识别外部病原体并产生抗体对抗病原体的学习机制而提出的&#xff0c;由…

智能算法之免疫算法求解TSP问题

Immunity Algorithm免疫算法 前言&#xff1a;本文主要围绕解决TSP旅行商问题展开&#xff0c;对于机器人的路线规划以及非线性方程求解的问题等解决方案大家可以直接参考github源码地址&#xff0c; 对于一些其他智能算法例如遗传算法解决一些现实问题都有实现&#xff01;&am…

免疫优化算法Python实现

免疫算法 免疫算法是模仿生物免疫机制&#xff0c;结合基因的进化机理&#xff0c;人工构造出的一种新型智能优化算法。 它具有一般免疫系统的特征&#xff0c;采用群体搜索策略&#xff0c;通过迭代计算&#xff0c;最终以较大的概率得到问题的最优解。 相比较于其他算法&am…

人工免疫算法详解

人工免疫算法&#xff08;Artificial Immune Algorithm&#xff0c;AIA&#xff09;是一种基于生物免疫系统&#xff08;BIS&#xff09;的启发式优化算法&#xff0c;是对生物免疫算法的拓展和改进。AIA 借鉴了生物免疫系统中抗体和免疫记忆细胞等概念&#xff0c;采用人工免疫…

automl-演化算法-免疫算法/免疫遗传算法

遗传算法的退化问题&#xff1a; 在对算法的实施过程中不难发现两个主要遗传算子都是在一定发生概率的条件下&#xff0c;随机地、没有指导地迭代搜索&#xff0c;因此它们在为群体中的个体提供了进化机会的同时&#xff0c;也无可避免地产生了退化的可能。在某些情况下&#x…

##智能优化算法复习--免疫算法IA

简介&#xff1a;免疫算法&#xff08;Immune Algorithm&#xff0c;IA&#xff09;是指以在人工免疫系统的理论为基础&#xff0c;实现了类似于生物免疫系统的抗原识别、细胞分化、记忆和自我调节的功能的一类算法。 免疫算法和遗传算法很类似&#xff1a; 遗传算法的思想简…

智能优化算法:冠状病毒群体免疫优化算法 -附代码

智能优化算法&#xff1a;冠状病毒群体免疫优化算法 文章目录 智能优化算法&#xff1a;冠状病毒群体免疫优化算法1.算法原理2.算法结果3.参考文献4.Matlab 摘要&#xff1a;冠状病毒群体免疫优化算法是于2020年提出的一种新型智能优化算法。 1.算法原理 冠状病毒群免疫优化算…

人工免疫算法学习通解

人工免疫算法&#xff08;Artificial Immune System&#xff0c;AIS&#xff09;是一种基于免疫系统的启发式优化算法&#xff0c;其基本思想是模拟生物体内的免疫系统对抗外部威胁的过程&#xff0c;通过生成、选择、进化、记忆和协同等机制来搜索最优解。 AIS 通常包含两个主…