C++ TEXTCHANGED EVENT

Visual C++ ve Dev C++ ile Windows forma eklenen textbox kontrolünün içeriği değiştikçe çalışan event olayı uygulaması. Textbox textchanged event olayı örnek programı.


Merhaba;



C# dilinde event oluşturmak çok basittir. Properties penceresini açar ve şimşek ikonuna tıklarsanız tüm eventler orada listelenir. Hangisinin üzerini çift tıklarsanız onun event olayı otomatik oluşturulur. Ancak bu profesyonel programcılık değildir. Böyle programlamayı öğrenemezsiniz.

C# dilinde de eventleri kodla oluşturabiliyoruz tabii. C# dilinin en güzel yanı kolayca dll kütüphaneleri oluşturarak bunları programa eklemek ve mimari şeklinde yazılımlar oluşturabilmek.

C++ ise sadece profesyonel yazılımcılara özgü bir dildir. Yazılım algoritmasını bilmeniz lazımdır. Yazılım algoritmasına ve mantığına ne kadar hakimseniz o kadar çabuk ve profesyonel programlar yazarsınız.

Ben Visual C# ile de geliştirme yapıyorum. Ama C++ her ortamda çalıştığından ve saf kod ile yazılabildiğinden daha çok C++ ya ağırlık veriyorum. Esasen C++ ile gerekli kütüphanelerinizi oluşturduktan sonra C++ daha avantajlı diyebilirim.

C++ ile form uygulamalarından bir problem de textbox’un içeriği değişince çalıştırmakistediğiniz komutların çalışması. Bununla ilgili örnek maalesef yok gibiydi. C++ ile çalışmayı zevk sayanlara ve bu konuda kendini geliştirmek isteyenlere bu işlevi bir kaynak olarak sunayım dedim. Burada C++ ile Windows form uygulamalarına ilişkin yığınla örnek verdim ve bu örnekleri artırarak devam ettirmek niyetindeyim.

Forma TextBox Kontrolü Ekleme

#define TextBox1 301
#define TextBox2 302

HWND TxtBX1;
HWND TxtBX2;
TxtBX1 = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Edit"), TEXT(" "),
   WS_CHILD | WS_VISIBLE, 150, 50, 220,
   25, hwnd, HMENU(TextBox1), NULL, NULL);
    TxtBX2 = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Edit"), TEXT(" "),
   WS_CHILD | WS_VISIBLE, 450, 50, 220,
   25, hwnd, HMENU(TextBox2), NULL, NULL);



TextBox’un Text_Changed Eventini Oluşturma

case WM_COMMAND:
   
   
   if(LOWORD(wParam)==301)
   {
    switch(HIWORD(wParam))
    {
     case EN_CHANGE:
     TextBoxKeyPress();
     
     break;
    } 
   }

Yukarıdaki örnekte “301” ifadesi event olayı tanımlanan textbox’un id’sidir ve üst kısımda #define ile tanımlanmıştır.

Aşağıda bir örnek yer almakta. Örnek programımızda kullanıcı textbox1’e değer girdikçe textbox2’deki sayı birer artarak devam etmektedir. Yani 1. Kutuya girdiğiniz her karakter için event olayı işletilmekte ve 2. Kutudaki sayı 1 artmaktadır. Programı ilk çalıştırdığınızda iki kutu da boş gelecektir. Soldaki kutuya değer girince sağdaki kutuda sayı belirecektir.

Program DEV C++ ile yazılmıştır. Bu kodlar visual studio programında da çalışmaktadır. Visual stduio programında çalıştırabilmek için boş proje (Empty Project) oluşturarak yazmalısınız. Bu kodlar DEV C++ editöründe de Empty Project ile oluşturulan boş sayfaya kodlar yazılarak çalıştırılmıştır.

DEV C++ ile “Empty Project” oluşturarak kodları yazmanız durumunda programı derlemeden önce Project >>Project options adımları ile açılan Project options penceresinden Type kısmından WIN32 GUI seçeneğini seçin. Aksi halde hem komut penceresi hem de form açılır.


Kolay Gelsin.




Tam Program Kodları


#include <windows.h>
#include <iostream>
#include <sstream>


#define TextBox1 301
#define TextBox2 302

HWND TxtBX1;
HWND TxtBX2;

void TextBoxKeyPress();


using namespace std;
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
 switch(Message) 
 {
  
  case WM_DESTROY: 
  {
   PostQuitMessage(0);
   break;
  }
  
   
     
   case WM_COMMAND:
   
   
   if(LOWORD(wParam)==301)
   {
    switch(HIWORD(wParam))
    {
     case EN_CHANGE:
     TextBoxKeyPress();
     
     break;
    } 
   }
   
    
  switch(wParam)
  {
  
   break;
   
   
  }
   
  default:
   return DefWindowProc(hwnd, Message, wParam, lParam);
 }
 return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
 WNDCLASSEX wc; 
 HWND hwnd; 
 MSG msg; 
 memset(&wc,0,sizeof(wc));
 wc.cbSize = sizeof(WNDCLASSEX);
 wc.lpfnWndProc = WndProc; 
 wc.hInstance = hInstance;
 wc.hCursor = LoadCursor(NULL, IDC_ARROW);

 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
 wc.lpszClassName = "WindowClass";
 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); 
 wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 
 if(!RegisterClassEx(&wc)) {
  MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
  return 0;
 }
 hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Caption",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT, 
  CW_USEDEFAULT,
  1020, 
  680, 
  NULL,NULL,hInstance,NULL);
   
   TxtBX1 = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Edit"), TEXT(" "),
   WS_CHILD | WS_VISIBLE, 150, 50, 220,
   25, hwnd, HMENU(TextBox1), NULL, NULL);
    TxtBX2 = CreateWindowEx(WS_EX_CLIENTEDGE | WS_EX_WINDOWEDGE, TEXT("Edit"), TEXT(" "),
   WS_CHILD | WS_VISIBLE, 450, 50, 220,
   25, hwnd, HMENU(TextBox2), NULL, NULL);
    
    
  
  
 if(hwnd == 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;
}
int xx=0;
void TextBoxKeyPress()
{


 ostringstream stpw;
  stpw<<xx;
  string total = stpw.str();
  
  const char *cdeg = total.c_str();
  SetWindowText(TxtBX2, cdeg);

 xx++;

 //SendMessage(TxtBX2, EM_SETSEL, (WPARAM)0, (LPARAM)0);
}





SANATSAL BİLGİ

30/01/2017



 

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM

COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI