Freelancer

Tuesday, December 10, 2013

Textbox with placeholder by C#

It's here. A textbox with placeholder. Look like input control in html. Create a file named STextBox.cs and paste this code:

// -----------------------------------------------------------------------------
// File name: STextBox.cs
// Author: Smart Goat
// Email: dmtmd2010@yahoo.com.vn
// Blog: knowledgesharez.net
// Date: 2013-12-09
// Description: a text box with placeholder, similar the web input control.
//   - Properties:
//      + Placeholder: string - The content of the placeholder
//   - Methods:
//      + IsEmpty(): bool - Check if the text box is empty (recommended)
// -----------------------------------------------------------------------------

using System;
using System.Drawing;
using System.Windows.Forms;

namespace FooBar
{
    class STextBox : TextBox
    {
        private bool textInputted;
        private Color backupForeColor = Color.Empty;
        private string placeholder = string.Empty;

        public string Placeholder
        {
            get { return placeholder; }
            set
            {
                placeholder = value;
                SetPlaceHolder();
            }
        }

        public bool IsEmpty()
        {
            return string.IsNullOrEmpty(Text) || !textInputted;
        }

        private void SetPlaceHolder()
        {
            if (string.IsNullOrEmpty(Text))
            {
                Text = placeholder;
                ForeColor = Color.Gray;
                textInputted = false;
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            base.OnTextChanged(e);
            textInputted = !string.IsNullOrEmpty(Text);
        }

        protected override void OnEnter(EventArgs e)
        {
            base.OnEnter(e);
            if (!textInputted)
            {
                Text = string.Empty;
                ForeColor = backupForeColor;
            }
        }

        protected override void OnLeave(EventArgs e)
        {
            base.OnLeave(e);
            SetPlaceHolder();
        }

        protected override void OnForeColorChanged(EventArgs e)
        {
            base.OnForeColorChanged(e);
            if (backupForeColor == Color.Empty)
            {
                backupForeColor = ForeColor;
            }
        }

        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            if (e.Control && e.KeyCode == Keys.A)
            {
                SelectAll();
            }
        }
    }
}

Sunday, December 8, 2013

Simple photoshop script

This is my simple script to join images using photoshop:

// create a new document size 30000x500 pixels at 72ppi
var doc = app.documents.add (30000, 500, 72);

// prepare the real width of the joined image
var wid = new UnitValue(0, "px");

// loop through all images
// 3 is the number of images
// images are store in c:\img folder
// images' file name: img1.jpg, img2.jpg, ...
for (i = 1; i <= 3; i++) {
    // take a file
    var fileRef = File("C:\\imgs\\img" + i + ".jpg");

    // open the image in a new document
    var imgdoc = app.open(fileRef);

    // resize the opened image to height 500px
    var ws = 500 * imgdoc.width / imgdoc.height;
    imgdoc.resizeImage(ws, 500);

    // copy the resized image to working document
    imgdoc.selection.selectAll();
    imgdoc.selection.copy();
    app.activeDocument = doc;
    doc.paste();

    // get the top layer
    var pslayer = doc.layers[0];

    // move the pasted image to the right position
    var position = pslayer.bounds;
    position[0] = wid - position[0];
    position[1] = 100 - position[1];
    pslayer.translate(position[0], -position[1]);

    // close the opened image and update the real width
    app.activeDocument = imgdoc;
    wid += imgdoc.width;
    imgdoc.close(SaveOptions.DONOTSAVECHANGES);
}

Monday, December 2, 2013

[Tutorial] Move form with no border

Just add the below snippet to your code (C#):

private const int WM_NCHITTEST = 0x84; // Mouse capture.
private const int HTCLIENT = 0x1;      // Client area.
private const int HTCAPTION = 0x2;     // Title bar.

// This function intercepts all the commands sent to the application.
// It checks if user click (WM_NCHITTEST) on the form area (HTCLIENT)
// It fakes the result as the title bar (HTCAPTION)
// This makes the form thinks user clicked on the title bar.
// So we can click and move form by (fake) title bar.
protected override void WndProc(ref Message message)
{
    base.WndProc(ref message);

    if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
    {
        message.Result = (IntPtr)HTCAPTION;
    }
}