这个小练习用D2.053+DFL完成了以下功能:
1.截屏(Chris的例子);
2.用截屏做闪屏,Timer(用Chris的例子);
3.数据库登陆窗口(数据库连接部分暂没做);
4.输入窗口模块module inputbox,从窗口输入中获得一个字符串和一个整数可以这样:
string input=inputBox.getString("用户自定义提示","用户自定义默认值");
int anInt=inputBox.getInt("","");
省略参数则使用默认参数值。
对类型转换未进行错误检查。
5.菜单的创建(Chris的例子)
6.Chris的MemoryGraphic例子收录(只是试了一下);
主程序:
passwordform.d
/*
Generated by Entice Designer
Entice Designer written by Christopher E. Miller
www.dprogramming.com/entice.php
*/
import dfl.all;
import dfl.internal.winapi;
import std.string;
import std.c.string;
import std.conv;
import std.stdio;
import inputbox;
import splashform;
//extern(Windows) BOOL FindWindowEx
class PasswordForm: dfl.form.Form
{
// Do not modify or move this block of variables.
//~Entice Designer variables begin here.
dfl.label.Label label1;
dfl.textbox.TextBox textBox1;
dfl.label.Label label2;
dfl.textbox.TextBox textBox2;
dfl.button.Button btnOK;
dfl.button.Button btnCancel;
dfl.button.Button btnGetInput;
//~Entice Designer variables end here.
this()
{
initializePasswordForm();
//@ Other PasswordForm initialization code here.
}
private void initializePasswordForm()
{
// Do not manually modify this function.
//~Entice Designer 0.8.5.02 code begins here.
//~DFL Form
formBorderStyle = dfl.all.FormBorderStyle.FIXED_SINGLE;
startPosition = dfl.all.FormStartPosition.CENTER_SCREEN;
text = "Password Form";
clientSize = dfl.all.Size(314, 188);
//~DFL dfl.label.Label=label1
label1 = new dfl.label.Label();
label1.name = "label1";
label1.text = "用户名:";
label1.bounds = dfl.all.Rect(16, 48, 56, 16);
label1.parent = this;
//~DFL dfl.textbox.TextBox=textBox1
textBox1 = new dfl.textbox.TextBox();
textBox1.name = "textBox1";
textBox1.bounds = dfl.all.Rect(88, 40, 144, 24);
textBox1.parent = this;
//~DFL dfl.label.Label=label2
label2 = new dfl.label.Label();
label2.name = "label2";
label2.text = "密码:";
label2.bounds = dfl.all.Rect(16, 88, 64, 16);
label2.parent = this;
//~DFL dfl.textbox.TextBox=textBox2
textBox2 = new dfl.textbox.TextBox();
textBox2.name = "textBox2";
textBox2.bounds = dfl.all.Rect(88, 80, 144, 24);
textBox2.parent = this;
//~DFL dfl.button.Button=btnOK
btnOK = new dfl.button.Button();
btnOK.name = "btnOK";
btnOK.text = "(&O)登陆";
btnOK.bounds = dfl.all.Rect(56, 120, 88, 24);
btnOK.parent = this;
//~DFL dfl.button.Button=btnCancel
btnCancel = new dfl.button.Button();
btnCancel.name = "btnCancel";
btnCancel.text = "(&C)取消";
btnCancel.bounds = dfl.all.Rect(176, 120, 88, 24);
btnCancel.parent = this;
//~DFL dfl.button.Button=btnGetInput
btnGetInput = new Button;
btnGetInput.name = "btnGetInput";
btnGetInput.text = "...";
btnGetInput.bounds = dfl.all.Rect(248, 40, 40, 24);
btnGetInput.parent = this;
//~Entice Designer 0.8.5.02 code ends here.
this.acceptButton=btnOK;
this.cancelButton=btnCancel;
btnCancel.click~=&onCancel;
btnOK.click~=&onOK;
//textBox2.passwordChar='*';
this.centerToParent;
auto menu=new MainMenu;
this.menu=menu;
auto currentMenu=new MenuItem("(&F)文件");
menu.menuItems.add(currentMenu);
auto currentItem=new MenuItem("(&N)新建");
currentMenu.menuItems.add(currentItem);
currentItem=new MenuItem("Recent");
currentMenu.menuItems.add(currentItem);
currentMenu=currentItem;
currentItem=new MenuItem("File");
currentMenu.menuItems.add(currentItem);
currentItem=new MenuItem("Project");
currentMenu.menuItems.add(currentItem);
currentMenu=cast(MenuItem)currentMenu.parent;
currentItem=new MenuItem;
currentItem.barBreak=true;
currentMenu.menuItems.add(currentItem);
currentItem=new MenuItem("E&xit");
currentMenu.menuItems.add(currentItem);
currentItem=new MenuItem("Side Option");
currentItem.breakItem=true;
currentItem.checked=true;
currentMenu.menuItems.add(currentItem);
btnGetInput.click~=&getInputClick;
this.acceptButton=btnOK;
this.cancelButton=btnCancel;
}
protected void getInputClick(Object sender,EventArgs e)
{
string text1Value=textBox1.text;
string text2Value=textBox2.text;
string income=inputBox.getString;
textBox1.text=(income.length>0)?income:text1Value;
int temp=inputBox.getInt;
if(temp!=int.min)
textBox2.text=to!string(temp);
else
textBox2.text=text2Value;
}
protected void onCancel(Object sender,EventArgs e)
{
close;
}
protected void onOK(Object sender,EventArgs e)
{
close;
}
}
class GraphTest: Form
{
this()
{
text = "MemoryGraphics";
Panel panGraphic = new MemDrawer(2000,2000);
panGraphic.backColor = Color(0,0,0);
panGraphic.dock( DockStyle.FILL );
this.controls.add(panGraphic);
}
}
class MemDrawer:Panel
{
private MemoryGraphics memGraph;
this(int w,int h)
{
memGraph = new MemoryGraphics(w,h);
ubyte r = 0 ;
for (int i=0;i<w;i++)
{
r += 10;
if (r>255) r=0;
memGraph.drawLine(new Pen(Color(r,255,255)), i,0,i,h);
}
}
protected override void onPaint(PaintEventArgs ea)
{
memGraph.copyTo(createGraphics,0,0,memGraph.width,memGraph.height);
}
}
class MyForm : Form {
Button btn;
SimplePictureBox pb;
this() {
initializeMyForm();
}
private void initializeMyForm() {
text = "My Form";
clientSize = Size(292, 273);
btn = new Button();
btn.parent(this);
btn.text("Click ME");
btn.dock(DockStyle.TOP);
btn.click ~= &btn_click;
pb = new SimplePictureBox();
pb.parent(this);
pb.sizeMode=PictureBoxSizeMode.STRETCH_IMAGE;
pb.dock(DockStyle.FILL);
}
private void btn_click(Control sender, EventArgs ea) {
HWND hWnd = FindWindowExA(cast(HWND)0, cast(HWND)0, null, toStringz("0")); //or 0 for desktop...
//writefln("HWND = %d", hWnd);
Graphics g = MemoryGraphics.fromHwnd(hWnd);
MemoryGraphics mg = new MemoryGraphics(1280,1024);
g.copyTo(mg, 0,0,1280,1024);
Bitmap bmp = mg.toBitmap(mg);
pb.image(bmp);
}
}
int main()
{
int result = 0;
try
{
Application.enableVisualStyles();
//@ Other application initialization code here.
SplashForm splash=new SplashForm;
Application.run(splash);
Application.run(new PasswordForm);
}
catch(Exception o)
{
msgBox(o.toString(), "Fatal Error", MsgBoxButtons.OK, MsgBoxIcon.ERROR);
result = 1;
}
return result;
}
inputbox.d
/*
Generated by Entice Designer
Entice Designer written by Christopher E. Miller
www.dprogramming.com/entice.php
*/
import dfl.all;
import std.string;
import std.conv;
class InputBox: dfl.form.Form
{
// Do not modify or move this block of variables.
//~Entice Designer variables begin here.
dfl.label.Label promptLabel;
dfl.textbox.TextBox txtInput;
dfl.button.Button btnOK;
dfl.button.Button btnCancel;
//~Entice Designer variables end here.
private string value;
int dlgResult;
this()
{
initializeInputBox();
//@ Other InputBox initialization code here.
}
private void initializeInputBox()
{
// Do not manually modify this function.
//~Entice Designer 0.8.5.02 code begins here.
//~DFL Form
formBorderStyle = dfl.all.FormBorderStyle.FIXED_SINGLE;
startPosition = dfl.all.FormStartPosition.CENTER_PARENT;
text = "Input Box";
clientSize = dfl.all.Size(322, 164);
//~DFL dfl.label.Label=promptLabel
promptLabel = new dfl.label.Label();
promptLabel.name = "promptLabel";
promptLabel.font = new dfl.all.Font("Microsoft Sans Serif", 16f, cast(dfl.all.FontStyle)(dfl.all.FontStyle.BOLD | dfl.all.FontStyle.ITALIC));
promptLabel.foreColor = dfl.all.Color(0, 0, 255);
promptLabel.text = "请输入一个整数:";
promptLabel.bounds = dfl.all.Rect(24, 16, 272, 32);
promptLabel.parent = this;
//~DFL dfl.textbox.TextBox=txtInput
txtInput = new dfl.textbox.TextBox();
txtInput.name = "txtInput";
txtInput.text = "0";
txtInput.bounds = dfl.all.Rect(24, 64, 200, 24);
txtInput.parent = this;
//~DFL dfl.button.Button=btnOK
btnOK = new dfl.button.Button();
btnOK.name = "btnOK";
btnOK.text = "(&O)确定";
btnOK.bounds = dfl.all.Rect(24, 120, 96, 24);
btnOK.parent = this;
//~DFL dfl.button.Button=btnCancel
btnCancel = new dfl.button.Button();
btnCancel.name = "btnCancel";
btnCancel.text = "(&C)取消";
btnCancel.bounds = dfl.all.Rect(216, 120, 88, 24);
btnCancel.parent = this;
//~Entice Designer 0.8.5.02 code ends here.
this.acceptButton=btnOK;
this.cancelButton=btnCancel;
txtInput.focus;
btnOK.click~=&okClick;
btnCancel.click~=&cancelClick;
}
protected void okClick(Object sender,EventArgs e)
{
dlgResult=1;
close;
}
protected void cancelClick(Object sender,EventArgs e)
{
dlgResult=0;
close;
}
//actually method getInt is not so useful to somebody who thinks need to handle carefully with Cancel button
//hit as the result is int.min other than 0 or -1 or the like.
public int getInt(string defaultPrompt="Please enter an integer:",string defaultValue="-999")
{
promptLabel.text=defaultPrompt;
txtInput.text=defaultValue;
//if(this.showDialog()!= DialogResult.CANCEL)
this.showDialog();
if(dlgResult==1)
{
value=txtInput.text;
return to!int(value.length?value:"0");
}
else if(dlgResult==0)
{
return int.min;
}
assert(0);
}
public string getString(string defaultPrompt="Please enter a string:",
string defaultValue="string here")
{
promptLabel.text=defaultPrompt;
txtInput.text=defaultValue;
//Using DialogResult.CANCEL does not work on hit Cancel button first and try a second time later to hit OK.
//if(this.showDialog()!= DialogResult.CANCEL)
this.showDialog();
if(dlgResult==1)
{
value=txtInput.text;
return value;
}
else if(dlgResult==0)
{
return null;
}
assert(0);
}
}
public:
static InputBox inputBox;
static this()
{
inputBox=new InputBox;
}
static ~this()
{
if(inputBox !is null)
inputBox.dispose;
}
splashform.d
/*
Generated by Entice Designer
Entice Designer written by Christopher E. Miller
www.dprogramming.com/entice.php
*/
import dfl.all;
import dfl.internal.winapi;
import std.c.string;
import std.conv;
import std.string;
class SimplePictureBox: PictureBox
{
protected override void onPaintBackground(PaintEventArgs ea)
{
}
protected override void createParams(ref CreateParams cp)
{
super.createParams(cp);
//cp.exStyle |= WS_EX_TRANSPARENT;
}
}
class SplashForm: dfl.form.Form
{
// Do not modify or move this block of variables.
//~Entice Designer variables begin here.
SimplePictureBox pictureBox1;
//~Entice Designer variables end here.
Timer timer;
this()
{
initializeSplashForm();
//@ Other SplashForm initialization code here.
startTimer;
}
protected void startTimer()
{
timer=new Timer;
timer.interval=3000;
timer.tick~=&ticks;
timer.start;
}
protected void ticks(Timer sender,EventArgs e)
{
this.close;
}
private void initializeSplashForm()
{
// Do not manually modify this function.
//~Entice Designer 0.8.5.02 code begins here.
//~DFL Form
formBorderStyle = dfl.all.FormBorderStyle.NONE;
startPosition = dfl.all.FormStartPosition.CENTER_PARENT;
text = "Splash Form";
clientSize = dfl.all.Size(304, 192);
//~DFL SimplePictureBox:dfl.picturebox.PictureBox=pictureBox1
pictureBox1 = new SimplePictureBox();
pictureBox1.name = "pictureBox1";
pictureBox1.dock = dfl.all.DockStyle.FILL;
pictureBox1.bounds = dfl.all.Rect(0, 0, 304, 192);
pictureBox1.parent = this;
//~Entice Designer 0.8.5.02 code ends here.
pictureBox1.sizeMode=PictureBoxSizeMode.STRETCH_IMAGE;
//this.onLoad~=&onLoad;
}
protected override void onLoad(EventArgs ea)
{
super.onLoad(ea);
HWND hWnd = FindWindowExA(cast(HWND)0, cast(HWND)0, null, toStringz("0")); //or 0 for desktop...
//writefln("HWND = %d", hWnd);
Graphics g = MemoryGraphics.fromHwnd(hWnd);
MemoryGraphics mg = new MemoryGraphics(1280,1024);
g.copyTo(mg, 0,0,1280,1024);
Bitmap bmp = mg.toBitmap(mg);
pictureBox1.image(bmp);
}
}