Licznik kliknięć w Builder 6
Ostatnio zmodyfikowano 2016-09-11 00:34
latajacaryba Temat założony przez niniejszego użytkownika |
Licznik kliknięć w Builder 6 » 2016-09-10 15:22:52 Witam. Chcę stworzyć licznik kliknięć w programie okienkowym. Przycisk na poczatku pokazuje "Start". Gdy go klikniemy pokazuje 1, gdy drugi raz go klikniemy, pokazuje 2 itd.
#include <vcl.h> #pragma hdrstop
#include "Unit3.h"
#pragma package(smart_init) #pragma resource "*.dfm" TForm1 * Form1;
__fastcall TForm1::TForm1( TComponent * Owner ) : TForm( Owner ) { }
void __fastcall TForm1::Button1Click( TObject * Sender ) { int x; if( Button1->Caption == "Start" ) { x = 0; Button1->Caption = x; } if( Button1->Caption == x ) { Button1->Caption = x + 1; } }
Ale nie działa. Po kliknięcu pokazuje 1 a przy kolejnych kliknięciach wyświetla nadal 1. O co chodzi? |
|
kistel66 |
» 2016-09-10 15:24:19 if( Button1->Caption == x ) { x++; Button1->Caption = x; }
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-10 15:32:50 Nie działa, wyświetla się start, chyba że to ja to jakoś źle wkleiłem. Możesz mi to zaimplementować do powyższego kodu? PS. mam Buildera 6
|
|
kistel66 |
» 2016-09-10 15:41:29 #pragma package(smart_init) #pragma resource "*.dfm" TForm1 * Form1;
int x = 0;
__fastcall TForm1::TForm1( TComponent * Owner ) : TForm( Owner ) { }
void __fastcall TForm1::Button1Click( TObject * Sender ) { if( Button1->Caption != x ) { Button1->Caption = x; } x++; }
Pokombinuj trochę |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-10 16:15:28 Mam wrażenie że dla Ciebie to też jest zagadka ;D |
|
mateczek |
» 2016-09-10 18:42:22 nie mam buldrera ale może coś takiego void __fastcall TForm1::Button1Click( TObject * Sender ) { static int x = 0; x++; if( x == 5 ) x = 0; if( x == 0 ) Button1->Caption = "start"; else Button1->Caption = IntToStr( x ); } |
|
1aam2am1 |
» 2016-09-10 19:36:43 mateczek x nie może być statyczne gdyż gdy utworzymy więcej niż jeden obiekt pojawią się problemy, jak: -Klikamy pierwszy guzik pojawia się jeden. -Klikamy jeszcze raz i mamy dwa. -Klikamy drugi przycisk a tam odrazy pojawia się trzy. Nie mam buildera ale jeżeli caption to string to: void __fastcall TForm1::Button1Click( TObject * Sender ) { if( Button1->Caption == "" ) { Button1->Caption = "Start"; return; } if( Button1->Caption == "Start" ) { Button1->Caption = "1"; return; } int x = std::stoi( Button1->Caption ); ++x; Button1->Caption = std::to_string( x ); }
|
|
mateczek |
» 2016-09-10 20:46:19 @1aam2am1 x dałem jako zmienną statyczną funkcji nie klasy. Każdy nowy przycisk na formatce będzie miał inną funkcję. Więc raczej nie powinno być problemów (tak przynajmniej mi się wydaje). Klasa Tform to chyba główna klasa okna aplikacji (kiedyś bawiłem się troszkę Delphi ) wiec obiekt tej klasy istnieje tylko raz. Autor wątku Wybierze sobie co mu będzie bardziej pasować :). Biblioteka VCL jest napisana w pascalu. W Delphi było coś takiego takiego, że jeśli zapisywałeś do właściwości to tak naprawdę wywoływała się funkcja. I tak Button1->Caption = "napis";
Button1->setCaption( "napis" );
Button1->Caption = 123;
|
|
« 1 » 2 |