C++ İLE TABLO YAPIMI
C++ Programlama dili ile iki boyutlu textbox dizisi yapmak. Textboxlarla tablo yapımı. 10 satır ve 10 sütundan oluşan bir tablo yapmak, tabloya değer girmek ve tablodan değer okumak.
C++ ile tablo nasıl yapılır. Bu konuda hiç uğraştınız mı bilmem. Ama ben bunun için pratik bir yöntem geliştirdim. Ayrıca tablo, hem veri gösteriyor hem de veri girişi yapılıyor.
Bu şekilde satır ve sütunlardan oluşan bir tablo yapmak mümkündür. Ayrıca tabloyu geliştirebiliriz. Son derece kullanışlı bir tablo olacaktır.
Tablo başında sütunlar olacaktır. Sütun isimlerini dilediğiniz gibi yazabilirsiniz.
Tabloyu ben 10x10 şeklinde yaptım. Bunu siz ihtiyacınıza göre şekillendirebilirsiniz. Ayrıca büyüklükleri küçültüp, hücreleri birbirine yaklaştırarak Excell hücrelerine benzer bir yapı da elde edebilirsiniz.

Tabloyu oluşturmak için dizi Textboxlar tanımladım. İlk olarak global değişkeni tanımlıyoruz. Bu global değişkenleri WINAPI prosedüründe tanımlayıp kutuları oluşturan fonksiyonda kullanacağız.
HWND datahwnd;
HWND TextBox[100];
HWND Label[10];
HWND Button1;
HWND Button2;
HWND Button3;
Burada 100 elemanlı bir TextBox kontrolü oluşturduk. Buradaki TextBox ismi sizi yanıltmasın başka isim de koyabilirdiniz. Bu bir "HWND" kontrolüdür. Bunun bir Text kutusu olduğunu tanımlarken belirteceğiz.
Buttonlar ile ana form kontrollerini WINAPI fonksiyonunda tanımlayacağız.
Hsc1 = hInstance;
Hpsc1 = hPrevInstance;
Lpst = lpCmdLine;
cmdx = nCmdShow;
Hxw = datahwnd;
Button1 = CreateWindow("button", "OLUSTUR", WS_VISIBLE | WS_CHILD, 400, 450, 100, 25, datahwnd, HMENU(BUTTON_SW), NULL, NULL);
Button2 = CreateWindow("button", "KAYDET", WS_VISIBLE | WS_CHILD, 550, 450, 100, 25, datahwnd, HMENU(BUTTON_SW2), NULL, NULL);
Button3 = CreateWindow("button", "OKU", WS_VISIBLE | WS_CHILD, 700, 450, 100, 25, datahwnd, HMENU(BUTTON_SW3), NULL, NULL);
Daha sonra bir FormElemanlar() sınıfı oluşturarak tablomuzu oluşturacağız.
void FormElemanlar()
{
for (int t = 0; t < 10; t++)
{
Label[t] = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Static"), TEXT(""),
WS_CHILD | WS_VISIBLE, left1, top, 90,
25, Hxw, NULL, NULL, NULL);
text_id++;
left1 += 95;
}
SetWindowText(Label[0], "SUTUN1");
SetWindowText(Label[1], "SUTUN2");
SetWindowText(Label[2], "SUTUN3");
SetWindowText(Label[3], "SUTUN4");
SetWindowText(Label[4], "SUTUN5");
SetWindowText(Label[5], "SUTUN6");
SetWindowText(Label[6], "SUTUN7");
SetWindowText(Label[7], "SUTUN8");
SetWindowText(Label[8], "SUTUN9");
SetWindowText(Label[9], "SUTUN10");
left1 = 50;
top = 80;
for (int b = 0; b < 10; b++)
{
for (int c = 0; c < 10; c++)
{
TextBox[text_id]= CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Edit"), TEXT(""),
WS_CHILD | WS_VISIBLE, left1, top, 90,
25, Hxw, NULL, NULL, NULL);
text_id++;
left1 += 95;
}
top += 27;
left1 = 50;
}
}
Buttona tıklandığında tablo oluşacak. Tabii tablonun bazı hücrelerine birşeyler yazmalıyız. 2. Buttona tıklayınca tablonun bazı hücreleri dolacak.
void TextBoxYaz()
{
const char *Yaz;
string article = "SANATSAL";
Yaz=article.c_str();
SetWindowText(TextBox[25], Yaz);
article = "BILGI";
Yaz=article.c_str();
SetWindowText(TextBox[35], Yaz);
article = "EGITIM";
Yaz=article.c_str();
SetWindowText(TextBox[45], Yaz);
}
Tabii ki tabloyu okumak da lazım. 3. Buttona tıklayınca tablodan bir değer okunacak.
void TextBoxOku()
{
char oku[64];
string art;
GetWindowText(TextBox[25],oku,1024);
MessageBox(NULL, oku, "TEXTBOX25", MB_OK);
}
Uygulamayı DEV C++ ile yaptım, aslında Visual Studio ile yapmıştım. Ancak DEV C++ ücretsiz ve bu uygulamayı destekliyor. Bu nedenle herkes kolayca yapabilsin diye DEV C++ ile de yaptım. Visual Studio da sadece bazı string-char dönüşümleri ile ana pencerede birkaç komut farklılık gösteriyor.Textbox ve labellerin kodları birebir aynı.
Siz bunu Visual Studioda çalıştırmak isterseniz, VS’de boş bir pencere oluşturun, daha sonra pencere ana fonksiyonlarını bu yazıdaki kodlara göre düzenleyin( Button oluşturma, HWND nesneleri tanımlama vb.). Daha sonra yapacağınız tek şey,
const char *Yaz;
string article = "SANATSAL";
Yaz=article.c_str();
Yukarıdaki gibi ifadeleri,
char Yaz[64];
string article = "SANATSAL";
strcpy_s(Yaz, article.c_str());
SetWindowText(TextBox[25], Yaz);
İle değiştirmektir.
Pencereyi ve buttonları oluşturma ile ilgili detaylı anlatılmış bir örnek yapmıştım. Bu yüzden bu yazıda pencere, textbox ve labellerin oluşturulması üzerinde durmayacağım. Aşağıda C++ ile çoklu button ve label yazan linki tıklarsanız kontrollerin nasıl oluşturulduğunu ayrıntılı görebilirsiniz.
Kolay gelsin.
Tüm Kodlar.
#include <windows.h>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <sstream>
#define BUTTON_SW 1
#define BUTTON_SW2 2
#define BUTTON_SW3 3
int dataint;
HWND datahwnd;
HWND TextBox[100];
HWND Label[10];
HWND Button1;
HWND Button2;
HWND Button3;
//Bu değişkenler WINAPIDE tanımlanıp FormElemanlar() sınıfında kullanılacak
HINSTANCE Hsc1;
HINSTANCE Hpsc1;
LPSTR Lpst;
int cmdx;
HWND Hxw;
//Fonksiyon yordamları
void Button_SW_Click();
void Button_SW2_Click();
void Button_SW3_Click();
void TextBoxYaz();
void TextBoxOku();
using namespace std;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX winc;
HWND datahwnd;
MSG msg;
memset(&winc,0,sizeof(winc));
winc.cbSize = sizeof(WNDCLASSEX);
winc.lpfnWndProc = WndProc;
winc.hInstance = hInstance;
winc.hCursor = LoadCursor(NULL, IDC_ARROW);
winc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 15);
winc.lpszClassName = "WindowClass";
winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&winc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
datahwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","TEXTBOX OLUSTURMA",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
1020,
700,
NULL,NULL,hInstance,NULL);
//Global değişkenler
Hsc1 = hInstance;
Hpsc1 = hPrevInstance;
Lpst = lpCmdLine;
cmdx = nCmdShow;
Hxw = datahwnd;
//Buttonlar burada tanımlanmalı
Button1 = CreateWindow("button", "OLUSTUR", WS_VISIBLE | WS_CHILD, 400, 450, 100, 25, datahwnd, HMENU(BUTTON_SW), NULL, NULL);
Button2 = CreateWindow("button", "KAYDET", WS_VISIBLE | WS_CHILD, 550, 450, 100, 25, datahwnd, HMENU(BUTTON_SW2), NULL, NULL);
Button3 = CreateWindow("button", "OKU", WS_VISIBLE | WS_CHILD, 700, 450, 100, 25, datahwnd, HMENU(BUTTON_SW3), NULL, NULL);
if(datahwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
char SlcTxt[1020];
PAINTSTRUCT ps;
HDC hdc;
switch(Message)
{
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
case WM_COMMAND:
switch(wParam)
{
case BUTTON_SW:
Button_SW_Click();
break;
case BUTTON_SW2:
TextBoxYaz();
break;
case BUTTON_SW3:
TextBoxOku();
break;
}
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
int text_id = 0;
int left1 = 50;
int top = 50;
void FormElemanlar()
{
//Önce labeller
for (int t = 0; t < 10; t++)
{
Label[t] = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Static"), TEXT(""),
WS_CHILD | WS_VISIBLE, left1, top, 90,
25, Hxw, NULL, NULL, NULL);
text_id++;
left1 += 95;
}
SetWindowText(Label[0], "SUTUN1");
SetWindowText(Label[1], "SUTUN2");
SetWindowText(Label[2], "SUTUN3");
SetWindowText(Label[3], "SUTUN4");
SetWindowText(Label[4], "SUTUN5");
SetWindowText(Label[5], "SUTUN6");
SetWindowText(Label[6], "SUTUN7");
SetWindowText(Label[7], "SUTUN8");
SetWindowText(Label[8], "SUTUN9");
SetWindowText(Label[9], "SUTUN10");
left1 = 50;
top = 80;
//2 boyutlu matrix textbox
for (int b = 0; b < 10; b++)
{
for (int c = 0; c < 10; c++)
{
TextBox[text_id]= CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Edit"), TEXT(""),
WS_CHILD | WS_VISIBLE, left1, top, 90,
25, Hxw, NULL, NULL, NULL);
text_id++;
left1 += 95;
}
top += 27;
left1 = 50;
}
}
void Button_SW_Click()
{
FormElemanlar();
}
void TextBoxYaz()
{
const char *Yaz;
string article = "SANATSAL";
Yaz=article.c_str();
SetWindowText(TextBox[25], Yaz);
article = "BILGI";
Yaz=article.c_str();
SetWindowText(TextBox[35], Yaz);
article = "EGITIM";
Yaz=article.c_str();
SetWindowText(TextBox[45], Yaz);
}
void TextBoxOku()
{
char oku[64];
string art;
GetWindowText(TextBox[25],oku,1024);
MessageBox(NULL, oku, "TEXTBOX25", MB_OK);
}
C++ Çoklu Button, TextBox ve Label Oluşturma
C++ İle Nesneleri Hareket Ettirmek
SANATSAL BİLGİ
28/03/2019