截屏、闪屏(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 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);
	}
}

你可能感兴趣的:(PHP,windows,Microsoft,F#)