Caixas de texto são utilizadas em sistemas com interface gráfica para capturar entrada de dados do usuário. Através de caixas de texto podemos entrar com nomes de usuário e senhas para validação, gravar informações em um banco de dados e setar variáveis de nossos programas para fazer cálculos, por exemplo. Em wxWidgets a classe que representa uma caixa de texto é a wxTextCtrl.
Para capturar o valor de um wxTextCtrl utilizamos o método GetValue() que retorna um wxString.
Para setar o valor de um wxTextCtrl utilizamos o método SetValue(wxString valor).
Para capturar o valor de um wxTextCtrl utilizamos o método GetValue() que retorna um wxString.
Para setar o valor de um wxTextCtrl utilizamos o método SetValue(wxString valor).
Cálculo do volume do cilindro
Neste post vou mostrar um programa para calcular o volume de um cilindro. O usuário entrará com o raio da base e a altura do cilindro. A fórmula para calculo do volume do cilindro é dada por: A = PI * r^2 * h, onde r é o raio e h é a altura. O programa avisará através de uma caixa de mensagem (wxMessageBox) se o usuário deixar algum campo vazio ou se os valores digitados não forem números.
Neste post vou mostrar um programa para calcular o volume de um cilindro. O usuário entrará com o raio da base e a altura do cilindro. A fórmula para calculo do volume do cilindro é dada por: A = PI * r^2 * h, onde r é o raio e h é a altura. O programa avisará através de uma caixa de mensagem (wxMessageBox) se o usuário deixar algum campo vazio ou se os valores digitados não forem números.
Segue abaixo o código da aplicação:
#include <wx/wx.h>
//cilindro.h
class Cilindro : public wxFrame {
public:
Cilindro(const wxString &titulo);
double Volume(double raio, double altura);
void Calcula(wxCommandEvent &evt);
void Limpa(wxCommandEvent &evt);
private:
double raio, altura, volume;
wxTextCtrl *txtraio;
wxTextCtrl *txtaltura;
wxTextCtrl *txtvolume;
wxStaticText *stcraio;
wxStaticText *stcaltura;
wxStaticText *stcvolume;
wxButton *calcular;
wxButton *limpar;
};
#include "cilindro.h"
//cilindro.cpp
Cilindro::Cilindro(const wxString &titulo) : wxFrame(NULL, -1, titulo, wxDefaultPosition, wxSize(290, 180))
{
wxPanel *painel = new wxPanel(this, -1);
wxBoxSizer *boxprincipal = new wxBoxSizer(wxVERTICAL);
wxGridSizer *boxtexto = new wxGridSizer(3, 2, 5, 5);
wxBoxSizer *boxbotoes = new wxBoxSizer(wxHORIZONTAL);
txtraio = new wxTextCtrl(painel, -1, wxT(""));
txtaltura = new wxTextCtrl(painel, -1, wxT(""));
txtvolume = new wxTextCtrl(painel, -1, wxT(""));
stcraio = new wxStaticText(painel, -1, wxT("Raio:"));
stcaltura = new wxStaticText(painel, -1, wxT("Altura:"));
stcvolume = new wxStaticText(painel, -1, wxT("Volume:"));
calcular = new wxButton(painel, 1000, wxT("Calcular"));
Connect(1000, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Cilindro::Calcula));
limpar = new wxButton(painel, 1001, wxT("Limpar"));
Connect(1001, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(Cilindro::Limpa));
boxtexto->Add(stcraio, 1, wxALL, 10);
boxtexto->Add(txtraio, 1, wxALL, 5);
boxtexto->Add(stcaltura, 1, wxALL, 10);
boxtexto->Add(txtaltura, 1, wxALL, 5);
boxtexto->Add(stcvolume, 1, wxALL, 10);
boxtexto->Add(txtvolume, 1, wxALL, 5);
boxbotoes->Add(calcular, 1, wxALL, 10);
boxbotoes->Add(limpar, 1, wxALL, 10);
boxprincipal->Add(boxtexto, 1, wxEXPAND);
boxprincipal->Add(boxbotoes, 1, wxEXPAND);
painel->SetSizer(boxprincipal);
txtraio->SetFocus();
Centre();
}
double Cilindro::Volume(double raio, double altura)
{
this->raio = raio;
this->altura = altura;
volume = 3.14 * (this->raio*this->raio) * altura;
return volume;
}
void Cilindro::Calcula(wxCommandEvent &evt)
{
double r, h, a;
//verificamos se algum dos campos está vazio
//se estiver mostramos uma mensagem de alerta
if((txtraio->IsEmpty()) || (txtaltura->IsEmpty())) {
wxMessageBox(wxT("Nao podem haver campos vazios!"), wxT("Aviso"));
return;
}
//verificamos se os valores digitados sao numeros
//se nao forem exibimos uma mensagem de alerta
if((!txtraio->GetValue().ToDouble(&r)) || (!txtaltura->GetValue().ToDouble(&h))) {
wxMessageBox(wxT("Os valores dos campos devem ser numericos!"), wxT("Aviso"));
return;
}
//chamamos o metodo Area() para calcular o volume do cilindro
a = Volume(r, h);
//setamos o textbox volume com o valor calculado
txtvolume->SetValue(wxString() << a);
}
void Cilindro::Limpa(wxCommandEvent &evt)
{
//limpamos os campos com o método Clear()
txtraio->Clear();
txtaltura->Clear();
txtvolume->Clear();
}
#include "cilindro.h"
//main.h
class MinhaApp : public wxApp
{
public:
virtual bool OnInit();
};
#include "main.h"
//main.cpp
IMPLEMENT_APP(MinhaApp)
bool MinhaApp::OnInit()
{
Cilindro *cilindro = new Cilindro(wxT("Calculo da area do cilindro"));
cilindro->Show(true);
return true;
}
Nenhum comentário:
Postar um comentário