Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Licznik kliknięć w Builder 6

Ostatnio zmodyfikowano 2016-09-11 00:34
Autor Wiadomość
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.
C/C++
//---------------------------------------------------------------------------

#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?
P-151638
kistel66
» 2016-09-10 15:24:19
C/C++
if( Button1->Caption == x )
{
    x++;
    Button1->Caption = x; }
P-151639
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
P-151640
kistel66
» 2016-09-10 15:41:29
C/C++
#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ę
P-151641
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
P-151646
mateczek
» 2016-09-10 18:42:22
nie mam buldrera ale może coś takiego
C/C++
void __fastcall TForm1::Button1Click( TObject * Sender )
{
    static int x = 0;
    x++;
    // procedura nastąpi po kliknięciu przycisku więc status po uruchomieniu programu musisz ustawić w gdzieś indziej w kodzie
    if( x == 5 ) x = 0; //reset
   
    if( x == 0 )
         Button1->Caption = "start";
    else
         Button1->Caption = IntToStr( x );
   
}
P-151652
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:
C/C++
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 );
   
}
P-151654
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
C/C++
Button1->Caption = "napis";
//było rówznoznacze z wywołaniem funkcji:
Button1->setCaption( "napis" ); // takie małe spryciarstwo Borlanda.
//Więc wcale nie jest wykluczone, że dopuszczalne jest zrobienie czegoś takiego:
Button1->Caption = 123; //po prostu przypisać tam inta
//Biblioteka Delphi builder ma własne funkcje konwertujące int->string i na odwrót. Nie wiem na ile VCL współpracuje std[/code][/code]
P-151655
« 1 » 2
  Strona 1 z 2 Następna strona