Thứ Hai, 14 tháng 7, 2014

Chẳng biết nó là thể loại gì nhưng thấy đẹp nên post chia sẻ với mọi người.
DEMO:
 Hướng dẫn tạo hình nền chữ huyền ảo

Thật awesome!!!   :)
Nào hãy cùng bắt tay vào thực hiện, bài này rất đơn giản, chỉ với vài thao tác cơ bản mà thôi!

B1: Mở PTS, tạo 1 hình mới

Hướng dẫn tạo hình nền chữ huyền ảo

Ở đây mình để Full HD.

B2: Tạo nền.

Tô đen bức ảnh.
Ấn Ctrl + J để nhân đôi layer gốc, dùng công cụ Gradient Tool (hoặc Brush) để vẽ một nửa hình tròn màu trắng, có độ rộng, độ tỏa vừa phải trên layer vừa nhân đôi.
Dùng Filter > Noise > Add Noise để thêm noise cho layer này.
Hướng dẫn tạo hình nền chữ huyền ảo

Hạ Opacity hoặc Fill xuống cho vừa mắt.
Mục đích của việc này là tạo ra một cái nền không quá đơn điệu, tạo cảm giác như có 1 bóng đèn đang chiếu vào   :v

B3: Thêm chữ nền

Dùng Text Tool để viết chữ, viết một đoạn sau đấy copy & paste sao cho phủ 1 khoảng rộng hơn bức hình. Nên để phông chữ nhỏ, dễ nhìn, màu chữ trắng.
Xong rồi thì ấn Ctrl + T rồi quay cả đám chữ đấy đi 1 góc khoảng 30 độ, tùy bạn.
Hướng dẫn tạo hình nền chữ huyền ảo

Hạ Opacity xuống khoảng 3-5% sẽ được như này
Hướng dẫn tạo hình nền chữ huyền ảo

B4: Tạo 1 kí hiệu hoặc text trung tâm của bức ảnh

Phần nền như thế coi như đã tạm, giờ ta chuyển sang thiết kế một ký hiệu hoặc viết 1 chữ làm trung tâm của bức ảnh.
Ở đây mình tạo 1 document mới, dùng Path Tool để vẽ ra 1 chữ 'N' cách điệu như này   :v
Hướng dẫn tạo hình nền chữ huyền ảo

Sau đó kéo layer chữ N trắng về file vừa nãy đang làm ở trên, chỉnh position và bóp hình đi 1 chút sẽ được như này
Hướng dẫn tạo hình nền chữ huyền ảo

Lưu ý nếu bạn viết Text trực tiếp lên đây thì phải Raterize layer đó (click chuột phải vào layer text rồi chọn rasterize layer)

B5: Sao chép layer nền phần ký hiệu trung tâm

Như ở bức ảnh hoàn thành thì phần chữ 'N' không còn là màu trằng đơn điệu như bức ảnh trên nữa mà nó được tạo nên từ các dòng text nền phía dưới. Thực chất của việc này là chọn ra 1 phần layer chữ nền vừa bao trọn phần ký hiệu kia, sau đó sao chép phần chọn đấy ra 1 layer khác, tăng opacity lên là được. Chú ý phần chữ nền ta đang để opacity khoảng 5% nên nó mới mờ như thế, nếu ta tăng lên 100% thì nó lại trắng bình thường!
Trước hết phải Rasterize Layer chữ nền.
Ctrl + click vào biểu tượng layer ký hiệu, sẽ có 1 cùng select được bao quanh ký hiệu.
Ấn sang layer text nền rồi ấn Ctrl + J để sao chép sang 1 layer khác.
Tăng opacity layer đó lên 100%, và tắt layer ký hiệu kia đi
Được như này
Hướng dẫn tạo hình nền chữ huyền ảo

Nếu vẫn còn vùng selection thì ấn Ctrl + D để bỏ đi

B6: Thêm một vài chi tiết khác

Bạn có thể dùng các công cụ như Shape, Text Tool, Brush... để thêm một vài chi tiết khác cho đỡ đơn điệu.
Hướng dẫn tạo hình nền chữ huyền ảo

Có thể thêm 1 vài Len Flare cho sinh động, cái này mình rất thích   :)

B7: Giảm bớt phần viền để làm nổi bật phần trung tâm

Bức hình đã cơ bản hoàn thiện bạn có thể lưu ngay bức ảnh coi như hoàn chỉnh. Hoặc có thể thêm 1 vài layer nhỏ để làm nổi bật phần trung tâm nên. Có thể dùng brush để bôi đen những phần góc hoặc làm như sau:
Tạo 1 layer mới ở trên cùng, bôi đen hoàn toàn, hạ opacity xuống khoảng 50% để có thể nhìn thấy các layer phía dưới
Dùng Lasso Tool để chọn 1 cùng chọn ở trung tâm bức ảnh, bao quanh phần ký hiệu hoặc một số chỗ khác muốn làm nổi bật. Xóa vùng chọn đó đi

Để Feather lớn để không làm quá lộ đường cắt
Cuối cùng, có thể giảm tiếp hoặc tăng opacity lên. Dùng Gaussian Blur (radius khoảng 50 - 60) để làm mờ đường cắt, có sự tương đối giữa phần trung tâm và phần viền
Hướng dẫn tạo hình nền chữ huyền ảo


Vậy là đã hoàn tất bức hình, chúc bạn thành công!

Thứ Tư, 9 tháng 7, 2014

Mình xin giới thiệu tới các bạn sản phẩm mới hoàn thành: Phần mềm Duyệt Phim - phần mềm quản lý các thư viện phim, lấy thông tin phim từ IMDb.
Duyệt phim - phần mềm quản lý thông tin phim

Hầu hết các phim chất lượng cao (Bluray, DVD) có tên tuổi hiện nay đều có trên IMDb, và đây là 1 kênh có tiếng về đánh giá chất lượng phim.

Chức năng chính:

- Duyệt các phim trong thư mục, đưa chúng vào các thư viện. Phần mềm chỉ quét các file *.mkv, *.mp4, *.avi định dạng thường thấy với các phim chất lượng cao và mỗi thư mục con chỉ quét 1 phim.
Duyệt phim - phần mềm quản lý thông tin phim


- Cập nhật thư viện: Khi thư mục trên ổ cứng có thay đổi về phim (thêm bớt 1 số phim) => Thêm những phim mới được đưa vào thư mục, xóa những phim đã bị loại bỏ khỏi thư mục, những phim khác không bị thay đổi.
- Hiển thị trang tìm kiếm IMDb, cho người dùng chọn trang thông tin và dùng RegularExpressions để get các thông tin về lưu vào SQLite. Riêng phần hình ảnh dùng WebClient để download thông tin về rồi lưu vào SQLite dạng byte[].
- Phần Poster có ContextMenuStrip để: Chọn hình ảnh, lưu hình ảnh, xóa hình.
Duyệt phim - phần mềm quản lý thông tin phim


- Và các chức năng phụ khác.

Hướng dẫn sử dụng:

- Sau khi down phần mềm về các bạn chạy bình thường. Không nên để trong ổ cài win. Phần mềm sẽ sinh ra file Database - là nơi lưu CSDL, không được xóa nó và các file kèm theo.
- Lần đầu sử dụng chương trình chọn Library chọn Add => đặt tên và đặt đường dẫn cho thư viện.
Duyệt phim - phần mềm quản lý thông tin phim


Lưu ý về cách bố trí thư mục trên ổ cứng:
Phần mềm sẽ duyệt các thư mục con trong thư mục đã chọn. Với mỗi thư mục con chỉ chọn ra 1 file mkv/mp4/avi và tên của thư mục con sẽ là tên của phim phục vụ cho tìm kiếm sau này (còn tên file thì không quan trọng). Trong các thư mục con lại duyệt đệ quy tới các thư mục con nữa... (tên thư mục con có thể bắt đầu bằng '#')
=> Vì vậy cấu trúc thư mục nên như sau: Thư mục chính "Films", có các thư mục con: "Clash", "#Bad boys", "Trilogy - Transformer" -> { "Transformer 1", "Transformer 2", "Transformer 3" }... Trong thư mục con nên để duy nhất 1 file phim và các file phụ đề.

- Tìm và get thông tin từ IMDb: Chọn 1 phim click vào "Cập nhật thông tin từ IMDb", trang tìm kiếm hiện ra, bạn click vào link phim phù hợp, đợi một lúc hiện ra "Lấy từ trang này".
Duyệt phim - phần mềm quản lý thông tin phim


(Download về, giải nén, sử dụng ngay. Gồm 2 phiên bản: một là phiên bản thường với giao diện mặc định của Window, một phiên bản sử dụng giao diện của DevExpress 13.1 - yêu cầu máy phải cài sẵn Dev)

Thứ Ba, 8 tháng 7, 2014

Trong thiết kế web hẳn nhiều lúc bạn viết ra được những file CSS, JS rất dài nhưng bạn không chắc rằng nó đã đúng chuẩn chưa, hợp SEO chưa hoặc bạn muốn rút gọn nó để giảm kích thước file???

Rất đơn giản, sau đây tôi sẽ hướng dẫn các bạn cách chuẩn hóa, rút gọn CSS và JavaScipt của mình.
Chuẩn hóa, rút gọn CSS & JavaScript

I. Chuẩn hóa

- Với CSS thì chắc hẳn bạn cũng đã biết mỗi trình duyệt có 1 cách thức xử lý CSS khác nhau, do đó đôi khi bạn phải viết nhiều lần code CSS chỉ với 1 mục đích nào đó, để có thể tương tác với các các browser tốt nhất. Đơn giản nhất là các hiệu ứng như animation, transform, border-radius... đặc biệt là các thuộc tính của CSS3 thì với mỗi loại trình duyệt phải có 1 loại code tương ứng. 
-webkit-, -o-, -moz-... là các tiếp đầu ngữ gắn với thuộc tính CSS để đáp ứng các trình duyệt. Chẳng hạn như với Chrome thì nó sử dụng tiếp đầu ngữ -webkit-: -webkit-transform, -webkit-gradient... Với IE thì là -moz-, với Opera thì là -o-...
Chẳng phải nhớ hết và code hết chúng vì đã có công cụ giúp ta làm điều này. Tức là bạn chỉ cần code 1 version và sử dụng công cụ để nó tự động thêm các version khác. Công cụ tại trang web này.

- Với JavaScript bạn có thể có nhiều công cụ để kiểm tra độ chính xác của code như kiểm tra lỗi cú pháp... 
Bạn có thể sử dụng trang web này. JSLint là công cụ rất hữu ích và chính xác.

II. Rút gọn

Với 1 trang web lớn thì kích thước các file CSS, JS có thể là rất lớn và bạn lo ngại nó sẽ làm giảm tốc độ tải trang, gây phiền phức cho người xem. Hoặc bạn mất nhiều công sức để có thể nghĩ ra những dòng code thâm hiểm và không muốn ai soi mói. Đơn giản là việc rút gọn code sẽ làm điều này.

Việc rút gọn code sẽ loại bỏ những dòng comment trong file, những dầu xuống dòng thừa thãi hay những dấu cách chẳng có tác dụng gì, tối ưu các tên biến, cách thức tổ chức code để nhằm rút gọn tối đa nội dung của file gốc mà không làm mất đi những chức năng vốn có của nó. Việc làm code trở thành "một dòng duy nhất" cũng có 1 tác dụng là hạn chế sự soi mói của các coder gà mờ (mình chỉ nói là hạn chế và với các coder newbie thôi nhá). Nhưng tóm lại tác dụng lớn nhất của nó là làm giảm kích thước file, thậm chí có thể làm tăng tốc độ đọc file của trình duyệt.

Với CSS

Thì những việc mà rút gọn có thể làm như: chuyển "0px" thành "0", xóa comment, xóa các dấu Enter, dấu cách thừa (chẳng hạn border: 1px solid; => border:1px solid;) => file với 1 dòng duy nhất, gộp các thuộc tính cùng loại với nhau...
Các bạn có thể sử dụng các công cụ online: http://cssminifier.com/ hoặc http://gpbmike.github.io/refresh-sf/.

Như vậy sau khi chuẩn hóa ở trên + rút gọn là bạn có thể có được 1 file CSS tối ưu.

Đôi khi bạn muốn biến đổi ngược file đã rút gọn lúc trên, tức là biến nó về dạng thông thường, có xuồng dòng, tab đúng chuẩn... thì bạn có thể vào đây.

Với JavaScript

Việc rút gọn nội dung JavaScript có thể thực hiện: xóa các dấu Enter, cách không cần thiết, rút gọn các biến cục bộ (thành a, b, c, d...), rút gọn các hàm...
Các công cụ online tại http://jscompress.com/ hoặc http://gpbmike.github.io/refresh-sf/

Tương tự như với CSS bạn cũng có thể chuẩn hóa code JavaScript với công cụ này.

Thứ Sáu, 27 tháng 6, 2014

Ở các bài đăng trước mình đã giới thiệu tới các bạn khái niệm LINQ và cách làm việc với LINQ, đấy là một cách giao tiếp với cơ sở dữ liệu rất thuận tiện và nhanh chóng, dễ dàng cho lập trình viên. Một tính năng đặc biệt quan trọng của "LINQ to SQL" là cách giao tiếp với cơ sở dữ liệu thông qua các biến Context, hỗ trợ code dưới dạng lambda, đơn giản hóa mọi vấn đề, và quan trọng hơn đó là tính năng Binding dữ liệu - đều đã được giới thiệu trong các bài đăng trước.

Microsoft ADO.NET Entity Framework là một khuôn khổ đối tượng Object/ Bảng đồ quan hệ Relational Mapping (ORM) cho phép các nhà phát triển dể dàng làm việc với dữ liệu quan hệ như là các đối tượng domain-specific, loại bỏ đi sự khó khăn trong việc truy cập dữ liệu trước đây. Bằng cách sử dụng Entity Framework, truy vấn LINQ, thì việc lấy và thao tác dữ liệu như các đối tượng trở nên mạnh mẽ hơn. Entity Framework ORM cung cấp các dịch vụ như change tracking, idenity resolution, lazay loading, và truy vấn dữ liệu tập trung vào business logic của ứng dụng.
Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL


Đơn giản có thể định nghĩa Entity Framework như sau: Entity Framework là một khung Object/Relational Mapping (O/RM). Nó là một kỹ thuật mới cung cấp cho các nhà phát triển ADO.NET một cơ chế tự động để truy cập và lưu trữ dữ liệu trong cơ sở dữ liệu và làm việc với các kết quả ngoài DataReader và DataSet.
Các bạn có thể đọc thêm về O/RM tại đây.

Việc tại sao lại nên dùng Entity Framework sẽ được lý giải trong phần phân biệt Entity với LINQ to SQL.

I. Entity Framework là gì? Các thành phần của Entity Framework

Entity Framework là một bộ ánh xạ đối tượng – quan hệ cho phép người lập trình .NET  làm việc với dữ liệu quan hệ qua các đối tượng (object) nó giúp lập trình viên không cần viết mã cho (hầu hết) những gì liên quan đến truy cập dữ liệu. 

Các thành phần trong Entity Framework:
- Code là mã lệnh tạo thành các lớp đối tượng dữ liệu cho phép thao tác với dữ liệu.
- Model là sơ đồ gồm các hộp mô tả các thực thể và các đường nối kết mô tả các quan hệ.
- Database là cơ sở dữ liệu (có thể là SQL Server, Compact SQL Server, Local database, MySQL, Oracle,…)

Có 3 cách sử dụng Entity Framework: Code First, Models First, Database First.
Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL

- Database first: là phương pháp chỉ nên dùng khi ta đã có sẵn CSDL (không phải tạo), EF Wizard sẽ tạo Model và Code cho ta.
- Models first: nên dùng khi ta bắt đầu thiết kế CSDL từ đầu (từ chưa có gì). Ta sẽ thiết kế mô hình CSDL (Model) EF sẽ tự tạo code cho ta, sau đó nhờ EF Wizard tạo CSDL.
- Code first: nên dùng khi đã có mô hình CSDL, ta sẽ chỉ viết code từ đó tạo Database.

Dù cách nào thì cuối cùng cũng phải có Code để thao tác trong mã lệnh và Database để lưu trữ dữ liệu. Model chỉ là một thành phần trung gian.

Theo kinh nghiệm của nhiều lập trình viên đi trước, Code First là phương án mềm dẻo nhất (hơi mất công ngồi gõ code, tuy nhiên nếu dùng tốt code snippets thì đỡ nhiều).

Trước đây khi lập trình CSDL trong VB, VC,… ta luôn tạo CSDL liệu trước, sau đó mới xây dựng mã lệnh truy cập dữ liệu.

Trong bài này tôi sẽ hướng dẫn tạo 1 project Code First với cơ sở dữ liệu có sẵn.

II. Bắt đầu làm việc với Entity Framework

Để làm việc với Entity Framework một cách hoàn chỉnh chúng ta phải cài thêm Entity Framework bản mới nhất từ NuGet:

B1. Tạo Project mới

B2. Cài EF Power Tools vào Visual Studio: Tools -> Library Paskage Manager -> Manage NuGet Packages for Solution…
Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL

Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL

Bến trái, chọn Online. Nhập Entity Framework Power Tools vào khung Search (góc trên, bên phải) chọn Entity Framework Power Tools -> Install. 

Khi đã cài được, bạn chuột phải trên tên Project sẽ thấy có menu Entity Framework.

III. Tạo một ứng dụng Entity Code First sử dụng CSDL có sẵn

Code First tức là bạn phải code sau đó sinh Database từ code đó. Nhưng Database tạo ra như thế sẽ ít thuộc tính: ràng buộc, identity, unique... Giải pháp là tạo 1 database hoàn chỉnh trên SQL sau đó viết code để map CSDL với Entity của chúng ta.

Trước hết tạo ra các class mô tả các bảng trong CSDL của chúng ta, nó bao gồm các trường và thuộc tính, kiều của chúng.
public partial class tbLop
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int IdLop { get; set; }

[StringLength(50)]
public string Lop { get; set; }
}
public partial class tbHocVien
{
[Key]
public int IdHocVien { get; set; }

public int? IdLop { get; set; }

[StringLength(50)]
public string HoTen { get; set; }

[Column(TypeName = "date")]
public DateTime? NgaySinh { get; set; }
}

Sau đó tạo 1 class Context - là class quản lý tất cả các bảng và giao tiếp với Entity, nó tương tự như class DataContext trong LINQ to SQL.
public partial class DataContext : DbContext
{
/// <summary>
/// Connection string lưu ở App.config
/// theo name="DataContext"
/// </summary>
public DataContext()
: base("name=DataContext")
{
}

public virtual DbSet<tbHocVien> tbHocViens { get; set; }
public virtual DbSet<tbLop> tbLops { get; set; }
}

Trong App.config ta thiết đặt ConnectionString để class Conext liên kết với CSDL đã có sẵn.
<connectionStrings>
<add name="DataContext" connectionString="data source=\SQLEXPRESS;initial catalog=db_EF;persist security info=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>


Cách này rất thủ công và dễ xảy ra sai sót. Để làm việc này chúng ta có thể cài thêm 1 tool của Visual Studio giúp ta tạo Code First từ Database một cách nhanh chóng, chính xác.
Các bạn download tool tại đây. 
Sau khi tải về và cài đặt, khởi động lại Visual Studio, tạo 1 Entity mới ta sẽ thấy rõ hơn.

Thêm 1 Entity Model, chọn "Code First from Database"
Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL

Chọn Database có sẵn
Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL

Nếu chưa có thì chọn New Connection

Chọn các bảng/view/store để add vào Model
Giới thiệu về Entity Framework - So sánh giữa Entity Framework với LINQ to SQL

Sau đó nó sẽ tự sinh ra các class như trên và ConnectionString được lưu trong App.config
Nếu chưa làm được có thể xem tại đây.

Sau khi khai báo các đối tượng của Entity ta có thể sử dụng nó tương tự như đối với LINQ to SQL. Hướng dẫn chi tiết các điểm khác nhau tôi sẽ viết trong 2 bài khác.

IV. So sánh giữa Entity Framework với LINQ to SQL

Sau một thời gian sử dụng Entity tôi rút ra được một số nhận định ban đầu như sau:

LINQ to SQL

- Chỉ làm việc với CSDL của SQL Server
- Tạo ra file .dbml
- Không hỗ trợ các kiểu phức tạp
- Không thể tạo CSDL từ đối tượng
- Chỉ có kiểu ánh xạ 1-1 giữa đối tượng class với table/views
- Sử dụng DataContext

Entity Framework

- Có thể làm việc với các CSDL: Oracle, DB2, MySQL, SQL Server...
- Tạo ra file .edmx, .csdl, .msl, .ssdl hoặc các file class .cs thông thường
- Hỗ trợ các kiểu phức tạp
- Có thể tạo CSDL từ Model/Code đã thiết kế
- Có thể ánh xạ 1-1, 1-nhiều, nhiều-1, nhiều-nhiều giữa đối tượng entity với table/view
- Sử dụng DbContext, Entity SQL, ObjectContext.

Và hơn nữa mô hình Code First sinh ra các class riêng biệt => có thể dễ dàng thay đổi khi thay đổi CSDL

Các câu hỏi thường gặp

1. Hỏi: Tại sao chúng ta cần "Entity Framework" trong khi chúng tôi đã có "LINQ 2 SQL" ?
Trả lời: "Entity Framework" không phải được thiết kế để cạnh tranh với "LINQ 2 SQL", xa hơn nó được thiết kế để nhằm phục vụ một mục đích lớn hơn. Nó là một giải pháp ORM hoàn chỉnh. LINQ Provider chỉ là một khía cạnh của "LINQ 2 SQL"...

2. Hỏi: Nếu "LINQ 2 SQL" không thực sự cần thiết tại sao nó vẫn tồn tại?
Trả lời: Bây giờ, tôi không thể chính thức trả lời câu hỏi này (tôi không là đại diện cho Microsoft) nếu bạn nhìn vào sự tiến hóa về các framework và những bản phát hành của họ thì có thể không có kết hợp lý nào khác hơn so với những trình bày ở đây

Microsoft, có lẽ chưa từng có ý định đưa "LINQ 2 SQL" như là một giải pháp hoặc một framework. Có lẽ Entity framework chưa thật sự sẵn sàng tại thời điểm mà .Net 3.5 xuất xưởng. Microsoft đã đưa "LINQ 2 SQL" ra như một giải pháp điểm dừng của cách biệt hoặc chỉ đơn thuần là một mẫu cho "LINQ provider". Họ cuối cùng đã đưa ra Entity Framework với. Net 3.5 SP1. Tôi thật sự cảm thấy Entity Framework đã trở thành một thành phần của bản phát hành chỉnh thức và không phải là một phần của một gói dịch vụ. Không thể có hai nghi ngờ rằng Entity Framework là cách đề nghị đầy tham vọng cho việc truy cập dữ liệu và LINQ.

3. Hỏi: Vậy có phải kết luận rằng chúng ta nên thay thế tất cả "LINQ 2 SQL" với "Entity Framework".
Trả lời: Điều này dường như có vẻ là một kết luận hợp lý và cần phải được thực hiện trong thời gian dài. Tuy nhiên, dường như bản phát hành hiện tại của Entity Framework là chưa thật sự sẵn sàng cho nhu cầu doanh nghiệp và có lẽ chúng ta cần phải chờ ở bản phát hành của Net 4.0. Một số thử nghiệm độc lập đã cố gắng để chứng minh "LINQ 2 SQL" trong thực hiện của Entity Framework. Tôi đã không thực hiện các thử nghiệm cho một trong hai xác nhận hay mâu thuẫn với việc nghiên cứu của họ, mà chỉ chờ đợi ở phiên bản .Net 4.0.
Xem thêm tại đây.

Nguồn tham khảo: tổng hợp từ Internet.

Thứ Ba, 24 tháng 6, 2014

"Timer" là một điều khiển khá hữu ích trong C# - Winform. Timer tương tự như "setInterval" hay "setTimeOut" trong JavaScript đều có chức năng thực hiện một số chức năng nhất định trong các khoảng thời gian lặp lại. Một đoạn chương trình sẽ được lặp đi lặp lại với khoảng nhất định mà không ảnh hưởng đến các tiến trình khác.
Có nhiều loại Timer: System.Windows.Forms.Timer, System.Timers.Timer, System.Threading.Timer. Nhưng để đơn giản bây giờ chúng ta sẽ sử dụng điều khiển Timer của Windows.Forms.
Sử dụng Timer và một số chức năng với Timer

Để khai báo 1 đối tượng Timer cách đơn giản là vào Toolbox tìm "Timer" rồi kéo vào form
Sử dụng Timer và một số chức năng với Timer

Đặt các thuộc tính cho Timer
Sử dụng Timer và một số chức năng với Timer

Trong đó Interval là khoảng thời gian sẽ lặp lại, đơn vị tính miliseconds. Ở ví dụ ta đã bật cho Timer chạy và đặt khoảng thời gian cho nó là 1 giây (1000 miliseconds).

Sự kiện duy nhất của Timer là Timer_Tick cho phép ta thay đổi sự kiện mỗi khi timer lặp lại thời gian. Tức là khi timer lặp lại thì code trong hàm Timer_Tick sẽ được thực hiện.

Bây giờ, tôi sẽ hướng dẫn một vài công dụng với Timer:

- Đồng hồ chạy số trong Window Form

Ta có 2 label để hiển thị thời gian và ngày tháng, 2 label sẽ được thay đổi nội dung sau từng giây. Vậy chúng ta cần 1 điều khiển timer với khoảng lặp là 1000, nội dung Timer_Tick tương tự như sau:
private void timer1_Tick(object sender, EventArgs e)
{
lblTime.Text = (DateTime.Now.Hour < 10 ? "0" + DateTime.Now.Hour.ToString() : DateTime.Now.Hour.ToString()) + ":" + (DateTime.Now.Minute < 10 ? "0" + DateTime.Now.Minute.ToString() : DateTime.Now.Minute.ToString()) + ":" + (DateTime.Now.Second < 10 ? "0" + DateTime.Now.Second.ToString() : DateTime.Now.Second.ToString());
lblDate.Text = DateTime.Now.DayOfWeek.ToString() + ", " + (DateTime.Now.Day < 10 ? "0" + DateTime.Now.Day.ToString() : DateTime.Now.Day.ToString()) + "/" + (DateTime.Now.Month < 10 ? "0" + DateTime.Now.Month.ToString() : DateTime.Now.Month.ToString()) + "/" + DateTime.Now.Year;
}

- Ảnh động trong Window Form

Ta đã biết ảnh động thực sự là tập hợp các ảnh tĩnh được hiển thị lần lượt, lặp đi lặp lại sau 1 khoảng thời gian nhất định. Và ở đây ta dùng Timer để đặt cái khoảng thời gian nhất định đó. Mỗi khi đến điểm Tick thì thay đổi ảnh ở trong PictureBox.
/// <summary>
/// Biến kiểm tra ảnh động
/// Không hiểu sao phải dùng thêm 1 biến ngoài để kiểm tra
/// </summary>
private int _img = 1;
private void timer1_Tick(object sender, EventArgs e)
{
if (_img == 1)
{
// Thay đổi ảnh
pictureBox1.Image = NhacViec.Properties.Resources.Alarm2;
_img = 2;
}
else
{
pictureBox1.Image = NhacViec.Properties.Resources.Alarm1;
_img = 1;
}
}


Demo về 2 ví dụ này có tại phần mềm Nhắc việc.
Nếu có hứng thú các bạn có thể xem thêm các phần Timer khác và sự khác nhau giữa chúng tại đây.

Thứ Bảy, 21 tháng 6, 2014

Bạn quá bận rộn trong công việc với máy tính hay bạn đang chìm đắm trong những trận đấu kinh điển, những trận combat không dứt ra được!?! Đôi khi bạn có việc gì đấy đã lên lịch từ trước nhưng rồi lại quên béng đi!? Bạn thỉnh thoảng có đặt báo thức ở máy điện thoại nhưng rồi cũng quên mất sự xuất hiện của nó vì lúc nào cũng dán mắt vào màn hình máy tính, thậm chí còn đeo tai nghe, "quên hết sự đời".

Rất đơn giản vì giờ đây đã có "Nhắc Việc" - phần mềm nhỏ gọn sẽ nhắc bạn, không bỏ lỡ những sự kiện quan trọng.
Nhắc việc - Phần mềm hữu ích cho những người bận rộn

Link download: tại đây.

- Tính năng

Thêm các tùy chọn: Tiêu đề, nhạc chuông, thời gian nhắc, lặp lại tương tự như báo thức ở điện thoại
Chạy tự động cùng window
Form nhắc việc ở trên "Top" để người dùng để ý
Chạy ẩn dưới khay hệ thống

- Thông tin

Phần mềm do mình tự tìm tòi + viết hoàn chỉnh
Dùng SQLite => Không được xóa các file trong thư mục cài đặt

- Nhược điểm

Tiêu tốn tài nguyên RAM khá lớn

Nhiều chương trình như UniKey, KasperSky, SkyDrive, DropBox... đều có 1 phần chương trình chạy ngầm trong hệ thống và có 1 biểu tượng icon nhỏ ở khay hệ thống - system tray. Bạn có 1 chương trình yêu cầu phải chạy liên tục và chạy ẩn (không hiện ở taskbar), có 1 biểu tượng ở khay hệ thống để người dùng có thể tương tác với chương trình. Rất đơn giản chúng ta sẽ sử dụng NotifyIcon cho việc này.
Sử dụng NotifyIcon - Cách ẩn chương trình xuống khay hệ thống

1. Sử dụng NotifyIcon

- Các bạn search ở ToolBox "NotifyIcon" và kéo vào trong form của mình.

- Các thuộc tính của NotifyIcon:
Sử dụng NotifyIcon - Cách ẩn chương trình xuống khay hệ thống

BaloonTipIcon, BaloonTipText, BaloonTipTitle hiện ra như 1 thông báo nhỏ ở khay hệ thống (nếu chúng ta cho hiện).
Sử dụng NotifyIcon - Cách ẩn chương trình xuống khay hệ thống

ContextMenuStrip là lựa chọn menu khi ấn chuột phải vào notifyIcon.
Text là phần hiện lên khi ta di chuột vào notifyIcon.
Đặt mặc định cho notifyIcon có Visible hay không!?

- Thiết lập các menu chuột phải cho NotifyIcon
Trong ToolBox ta tìm vào kéo 1 đối tượng ContextMenuStrip.
Thêm các MenuItem cho contextmenu đấy. Ở đây hỗ trợ nhiều loại như MenuItem (giống 1 button), ComboBox, TextBox, Separator (vạch ngăn cách).
Sử dụng NotifyIcon - Cách ẩn chương trình xuống khay hệ thống

Thêm sự kiện click cho các MenuItem này.

Để sử dụng ContextMenuStrip này cho NotifyIcon đừng quên thiết lập ở phần NotifyIcon như trên.

2. Ẩn chương trình xuống khay hệ thống

Việc này thực sự chỉ là ẩn chương trình đang chạy và cho hiện 1 cái NotifyIcon lên. NotifyIcon có các MenuItem để tương tác với chương trình đang chạy, như mở chương trình, thoát chương trình..., các chức năng do ta đặt ở phần ContextMenuStrip phía trên. Vì ẩn chương trình và chương trình luôn chạy ngầm nên ta phải tính làm sao để giảm thiểu tài nguyên sử dụng, form chúng ta cho chạy ngầm phải ít tốn tài nguyên, chỉ để thực hiện các chức năng cơ bản (như để gọi các form to hơn) hoặc chỉ là 1 service.

Để thực hiện ẩn chương trình ta thêm 1 button, hoặc gán vào các sự kiện khác (minimize form chẳng hạn)
Sự kiện click của button này như sau
private void btnExit_Click(object sender, EventArgs e)
{
// Cho hiện notifyIcon
notifyIcon1.Visible = true;
// Hiện BaloonTip hoặc không
notifyIcon1.ShowBalloonTip(10);

// Chọn ẩn
this.Hide();
// Hoặc
this.ShowInTaskbar = false;
WindowState = FormWindowState.Minimized;
// Hoặc cả 2 để ẩn form
}

Phần việc còn lại là do NotifyIcon phụ trách. Chẳng hạn ta muốn click chuột phải để hiện menu context, click chuột trái để mở form: Ta thêm 1 sự kiện Click hoặc MouseClick cho NotifyIcon
private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
{
if(e.Button == System.Windows.Forms.MouseButtons.Left)
{
// Ẩn notifyIcon đi
notifyIcon1.Visible = false;
// Cách này
WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
// Hoặc
this.Show();
// Hoặc cả 2 miễn là phải tương ứng với lúc ẩn
}
}

Thứ Sáu, 20 tháng 6, 2014

Bạn thấy nhiều phần mềm có những form có hình dạng rất lạ (không phải hình chữ nhật, có border thông thường). Bạn hoàn toàn có thể tạo những form mang hình dạng đặc biệt tùy ý một cách đơn giản.
Customize Form - Tùy chỉnh form, tạo form có hình dạng bất kỳ
Như Photoshop chẳng hạn

Sau đây tôi sẽ hướng dẫn các bạn cách tạo 1 form tùy ý và các thao tác liên quan.

1. Tạo form với hình dạng tùy ý

Thực chất việc này là đặt 1 hình ảnh làm nền cho form rồi cho những phần còn lại "biến mất".
Customize Form - Tùy chỉnh form, tạo form có hình dạng bất kỳ

- Đầu tiên bạn thiết kế 1 cái hình ảnh làm nền cho form. Những phần không cần thiết thì bạn nên để trong suốt, rồi xuất ra ảnh .PNG

- Tiếp theo đặt "BackColor" của form là White, "BackgroundImage" là hình ảnh vừa tạo, FormBorderStyle là None

- Đây là phần quan trọng nhất: Cuộn xuống chọn "TransparencyKey" là White => Nó sẽ tìm tất cả phần nào của background form màu trắng để làm trong suốt phần đó. 
Cách này vô cùng đơn giản, để có thể tạo được 1 form tùy ý. Chính vì thế mà nó có nhiều chỗ không trong suốt cho lắm, đặc biệt là những đường giao nhau giữa 2 màu, đoạn đường chéo... Những điểm này khá nhỏ vẫn có thể chấp nhận được. Nếu bạn muốn có nó một cách hoàn hảo + opacity của từng phần trong form thì phải dùng đến phần xử lý đồ họa.

2. Di chuyển cho form tùy chỉnh

Với 1 form đã tạo được như trên vấn đề là khi ta loại bỏ border của form thì làm sao để di chuyển form đây??? Chỉ còn cách code!!!  :)
Việc code còn đem lại cho ta những tùy chọn về di chuyển form do ta tự quyết định: chẳng hạn có cho form "chui ra phía ngoài màn hình" không hoặc là bị bó hẹp trong khuôn khổ của màn hình, cho phép người dùng click chuột ở đâu để di chuyển form???

Trong phần global ta khai báo các biến toàn cục như sau:
/// <summary>
/// Di chuyển form
/// </summary>
private bool drag = false;
private Point dragCursor, dragForm;

Quay lại phần thiết kế để double click và thêm 3 sự kiện: MouseDown, MouseMove, MouseUp cho form.
Chỉnh sửa các sự kiện đấy như sau:
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
drag = true;
dragCursor = Cursor.Position;
dragForm = this.Location;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
int wid = SystemInformation.VirtualScreen.Width;
int hei = SystemInformation.VirtualScreen.Height;
if (drag)
{
// Phải using System.Drawing;
Point change = Point.Subtract(Cursor.Position, new Size(dragCursor));
Point newpos = Point.Add(dragForm, new Size(change));
// QUyết định có cho form chui ra ngoài màn hình không
if (newpos.X < 0) newpos.X = 0;
if (newpos.Y < 0) newpos.Y = 0;
if (newpos.X + this.Width > wid) newpos.X = wid - this.Width;
if (newpos.Y + this.Height > hei) newpos.Y = hei - this.Height;
this.Location = newpos;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
drag = false;
}

Như vậy hiện tại bạn có thể click vào bất cứ phần nào không trong suốt của form để di chuyển form.

3. Thêm một số phần khác

Khi loại bỏ border thì đồng nghĩa với việc không còn các nút Minimize, Maximize, Exit và box-shadow của form. Vậy ta phải thêm thủ công như sau

Thêm các nút điều khiển

Tự thiết kế hình ảnh cho các nút hoặc đơn giản chỉ là các button thông thường. Sau đó thêm sự kiện click như sau
private void btnMini_Click(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Minimized;
}

private void btnExit_Click(object sender, EventArgs e)
{
Application.Exit();
}

Thêm box shadow cho form 

Chúng ta phải override 1 thủ tục của form như sau:
/// <summary>
/// Drop Shadow cho form
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
// Bóng đổ
cp.ClassStyle |= 0x20000;
// Load các control cùng lúc
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}

Phần load các control 1 lúc có thể áp dụng cho các form khác, form có nhiều control. Chẳng hạn form bạn có rất nhiều control và thường xuyên phải Visible/Invisible chúng lần lượt. Như vậy khi các control hiện lên sẽ bị trễ nhìn rất mất mỹ quan. Khi thêm phần này vào thì các control sẽ hiển thị ra cùng 1 lúc, không có hiện tượng trễ.

Thứ Năm, 19 tháng 6, 2014

Bạn đã xây dựng được 1 website ASP.NET chạy hoàn hảo trên localhost và muốn đưa nó lên mạng Internet để "show hàng" với nhiều người. Việc tìm được 1 máy chủ - hosting ASP miễn phí, chất lượng tốt, ổn định là khá khó thay vì đối với hosting PHP thì lại có rất nhiều hosting miễn phí.

Sau khi tìm nhiều hosting ASP miễn phí, mình thấy chỉ có SOMEE.COM là trang cho chúng ta đăng ký 1 host miễn phí, chất lượng tốt, chạy được cả webform và mô hình MVC, chạy MS SQL khá ổn định. Đặc biệt hosting này không hay bị "die host" - vấn đề rất thường gặp ở các hosting PHP. Nói chung đây là 1 hosting rất phù hợp với những newbie đang tập tẹ vào lập trình ASP.NET.

Bài này mình sẽ hướng dẫn các bạn tạo 1 website trên somee và cách upload code lên host.

1. Đăng ký tài khoản trên somee.com

- Để đăng ký web hosting .NET miễn phí bạn vào trang http://somee.com/. Trong mục FREE .NET HOSTING chọn Learn More như hình bên dưới.
 Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Somee.com hỗ trợ ASP.NET từ phiên bản 1.1 đến 4.5, với 150MB bộ nhớ, 5GB băng thông hàng tháng, 15MB Microsoft SQL Server 2005, 2008 R2 hoặc 2012.

- Trong trang tiếp theo hiện ra. Click vào Order now như hình bên dưới để vào trang đăng ký.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Điền đầy đủ các thông tin đăng ký như hình dưới đây. Yêu cầu Email phải chính xác để xác minh tài khoản. Mục Zip/Postal code nhập 70000 nếu ở TP. HCM, các mục: Primary phone, Secondary phone, Fax number không cần nhập cũng được. Sau đó click Register new user and continue.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Trong trang mới hiện ra. Check vào 2 ô bên dưới. Sau đó Click Continue.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Ở trang mới hiện ra. Chúng ta thiết lập những thông tin cơ bạn như tên website trong mục Site name; Operating system chọn Windows server 2012, ASP.NET verson chọn 4.5. Site tile và Site Description do bạn tự đặt. Sau đó click vào Create website.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Trong trang tiếp theo hiện ra sẽ thông báo website của bạn đã được tạo thành công. Bạn click vào dòng Manage website để xem những thông tin cơ bản của webhosting somee miễn phí mà chúng ta vừa tạo.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Những lần sau, để truy cập vào panel điều khiển của webhosting vừa tạo. Ta vào trang somee.com rồi chọn CONTROL PANEL như hình dưới đây. Sau đó đăng nhập với đăng nhập và tài khoản vừa đăng ký. Ở đây bạn có thể thấy thông tin FTP, IP hãy lưu ý chỗ này để liên kết FTP về sau.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Như vậy vấn đề đăng ký ASP.NET webhosting miễn phí cơ bản hoàn tất. Và giờ chúng ta truy cập vào địa chỉ website mới vừa đăng ký. Ở ví dụ này là: http://www.nhatnghe.somee.com/. Và màn hình giao diện mặc định của website sau khi đăng kí như sau
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

2. Upload code lên host

- Nén tất cả code, resource, database của bạn vào 1 file .zip duy nhất để tiện cho việc upload

-  Trong màn hình quản trị control pannel của hosting, bên tay trái các bạn chọn File Manager, sau đó xoá trang Default.asp là trang mặc định của hosting đi. Các bạn xem hình bên dưới.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting

- Sau đó, bên tay phải ta chọn Upload, rồi tiến hành chọn file mà bạn vừa tải về được Upload lên hosting.
Đăng ký hosting miễn phí - Upload website ASP.NET lên hosting


Như vậy là bạn đã tạo được một trang web ASP.NET đơn giản trên 1 hosting miễn phí và đã up được code lên trên đó. 
Việc upload database, config website mình sẽ hướng dẫn trong 1 bài khác. 

Thân!

Nguồn tham khảo: doanweb, nhatnghe

Thứ Tư, 18 tháng 6, 2014

Đôi khi chúng ta cần lưu trữ thông tin nào đó liên quan đến người dùng, do người dùng cài đặt. Những thông tin này phải được lưu trữ một cách lâu dài, xuyên suốt từ phiên làm việc này đến phiên làm việc khác. Tức là ta phải có cách để lưu thông tin cài đặt của người dùng

Có nhiều cách để lưu thông tin cài đặt chương trình, sau đây là một số cách phổ biến, dễ sử dụng

1. Lưu thông tin cài đặt vào Registry

Registry là bộ nhớ lưu trữ các thông tin cài đặt của hệ điều hành cũng như của các phần mềm trên nó. Do vậy ta có hoàn toàn có thể lưu trữ và lấy các thông tin trên Registry.

Ưu điểm của cách này là truy xuất nhanh, ít bị thay đổi bởi người không hiểu biết, người dùng và chỉ có lập trình viên mới có thể biết được cấu trúc, vị trí lưu trên Registry.

Nhược điểm là khi muốn lưu, đọc dữ liệu trên Registry đều phải thực thi nhiều code và yêu cầu lập trình viên phải nắm vững cấu trúc của Registry. Các thông tin cài đặt này chỉ có tác dụng với máy đã tạo ra, khi copy ứng dụng sang máy khác thì thông tin cài đặt bị mất.

2. Lưu trực tiếp trên phần mềm

Nền tảng .NET FrameWork cho phép người dùng phần mềm chỉnh sửa và lưu các thông tin cài đặt ngay trên ứng dụng. Cách lưu thông tin cài đặt này rất dễ sử dụng, lập trình. Khi thêm 1 đối tượng setting thì .NET tự động sinh ra 1 class để quản lý các thông tin setting đó.

Để bắt đầu với cách này bạn click đúp vào "Properties" trong tab "Solution Explorer". Sau đó trong tab "Settings" hãy thêm những trường cài đặt mong muốn. Ở đây .NET hỗ trợ nhiều kiểu dữ liệu: bool, string, int, datetime...
Các cách lưu thông tin cài đặt cho ứng dụng C# - Apps setting

Sau khi đã lưu các thông số này, chúng ta đọc, lưu thông tin vào như sau:
// Đọc thông tin
string MySetting = ShowGridView.Properties.Settings.Default.MySetting;

// Ghi thông tin
ShowGridView.Properties.Settings.Default.CheckBox = true;
// Lưu lại
ShowGridView.Properties.Settings.Default.Save();

3. Lưu trên file bên ngoài

Một cách lưu trữ thông tin cài đặt nữa là lưu chúng ra một file text thông thường hoặc một file được mã hóa. Với cách này cũng có nhiều kiểu lưu trữ, tùy vào cách xử lý của lập trình viên:
  • Lưu vào 1 file text thông thường đặt cùng thư mục của ứng dụng. Các thông tin sẽ được lưu trữ theo tiêu chuẩn của lập trình viên. Sau đó lập trình viên phải đọc nội dung của file và xử lý chuỗi để lấy được các thông tin đã ghi trước đó.
  • Lưu vào 1 file XML với quy cách nhất định. Với cách này khi dùng các thủ tục đọc, ghi xml thì công việc đọc, lưu thông tin cài đặt sẽ dễ dàng hơn.
  • Lưu file vào thư mục AppData của từng User. Khi đó với các User khác nhau cùng sử dụng máy tính sẽ có những thông tin cài đặt khác nhau.
  • Lưu thông tin ra file .INI. Cách này bạn có thể tham khảo tại đây.
Vì các thông tin được lưu trên một file riêng biệt nên người dùng có thể dễ dàng thay đổi, hoán chuyển các thông tin cài đặt khi cần thiết (chỉ cần việc cut/paste file ra 1 chỗ khác).

Categories

Sample Text

Được tạo bởi Blogger.

Must Read

Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Popular Posts

Video

Popular Posts

Our Facebook Page