betty_betty2008 发表于 2013-1-28 09:34:52

截屏、闪屏(Timer)、输入窗口--DFL for D2.053

这个小练习用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 DesignerEntice Designer written by Christopher E. Millerwww.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 FindWindowExclass 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 FormformBorderStyle = dfl.all.FormBorderStyle.FIXED_SINGLE;startPosition = dfl.all.FormStartPosition.CENTER_SCREEN;text = "Password Form";clientSize = dfl.all.Size(314, 188);//~DFL dfl.label.Label=label1label1 = 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=textBox1textBox1 = new dfl.textbox.TextBox();textBox1.name = "textBox1";textBox1.bounds = dfl.all.Rect(88, 40, 144, 24);textBox1.parent = this;//~DFL dfl.label.Label=label2label2 = 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=textBox2textBox2 = new dfl.textbox.TextBox();textBox2.name = "textBox2";textBox2.bounds = dfl.all.Rect(88, 80, 144, 24);textBox2.parent = this;//~DFL dfl.button.Button=btnOKbtnOK = 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=btnCancelbtnCancel = 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=btnGetInputbtnGetInput = 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);elsetextBox2.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 DesignerEntice Designer written by Christopher E. Millerwww.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 FormformBorderStyle = dfl.all.FormBorderStyle.FIXED_SINGLE;startPosition = dfl.all.FormStartPosition.CENTER_PARENT;text = "Input Box";clientSize = dfl.all.Size(322, 164);//~DFL dfl.label.Label=promptLabelpromptLabel = 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=txtInputtxtInput = 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=btnOKbtnOK = 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=btnCancelbtnCancel = 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 withCancel 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 DesignerEntice Designer written by Christopher E. Millerwww.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 FormformBorderStyle = dfl.all.FormBorderStyle.NONE;startPosition = dfl.all.FormStartPosition.CENTER_PARENT;text = "Splash Form";clientSize = dfl.all.Size(304, 192);//~DFL SimplePictureBox:dfl.picturebox.PictureBox=pictureBox1pictureBox1 = 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);}}
页: [1]
查看完整版本: 截屏、闪屏(Timer)、输入窗口--DFL for D2.053