CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Problem z kontrolką Label.
Strona 1 z 2

Problem z kontrolką Label.

Nowy postNapisane: poniedziałek, 2 lipca 2018, 15:52
przez Proton
Witam.

W środowisku C++ XE Berlin 10.1 mam problem z wyświetleniem wartości w kontrolce Label.
Jest zadeklarowana zmienna int Licznik;

W timerze co 1 s :
inkrementuję Licznik ++;
oraz wyświetlam jego wartość na dwóch kontrolkach :
Edit1->Text = IntToStr(Licznik);
Label1->Caption = IntToStr(Licznik);

W kontrolce Edit1 co sekundę pojawia się wartość licznika, natomiast w kontrolce Label1 czasami się coś pojawi,
jakby był problem z odświerzaniem formy.

Będę wdzięczny za pomoc.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: poniedziałek, 2 lipca 2018, 16:17
przez lukagrom
Też mam Berlin, tyle że okrojony do wersji Starter.
Ja to robię tak: W sekcji prywatnej projektu deklaruje zmienną licznik
deklaruję -
KOD cpp:     UKRYJ  
private:
int licznik


Na początku w - FormCreate, daje mu - 0.
KOD cpp:     UKRYJ  
void __fastcall TForm1::FormCreate(TObject *Sender)
{

 licznik=0;
}
 

i w głównym zdarzeniu Timera zwiększam co 1.
KOD cpp:     UKRYJ  
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{


 Timer1->Enabled=true;
 Timer1->Interval=1000;
 Edit1->Text=IntToStr(licznik);
 Label1->Caption=IntToStr(licznik);
 ++licznik;
}
 

Odświeża się i Label i Edit. Inna kwestia, że ten Berlin u mnie zawsze dopiero kompiluje się za 2 razem, za pierwszym pokazuje błędy adresowania.

Re: Problem z kontrolką Label.

Nowy postNapisane: poniedziałek, 2 lipca 2018, 18:51
przez Proton
Ot takie pytanie co wyświetli Label1 a co Edit2 :
Dla właściwości formy FormStyle : system Win 7 Prof 64 bit ,program kompilowany na 64 bit
1. fsNormal
2. fsStayOnTop
3 .fsMDIForm

za godzinę odpowiem.

KOD cpp:     UKRYJ  
void __fastcall TMainForm::Timer1Timer(TObject *Sender)
{
 Label1->Caption= Licznik;
 Edit2->Text= Licznik;
 if(Licznik < 10)
  {
   Licznik += 1;
  }
  else
  {
   if(Licznik < 100)
        {
                Licznik += 10;
        }
        else
        {
         if(Licznik < 1000)
          {
                Licznik += 100;
          }
          else
           {
                 Licznik += 1000;
           }
          }
        }

}
//---------------------------------------------------------------------------

Re: Problem z kontrolką Label.

Nowy postNapisane: wtorek, 3 lipca 2018, 10:10
przez Proton
Odpowiedź :
Dla wybranej właściwości formy FormStyle : fsNormal lub fsStayOnTop
Edit2 będzie wyświetlał 0,1,2...9,10,20,30 ...90,100,200,300...1000,2000.. itd
Label1 będzie wyświetlał to co powyżej

Dla wybranej właściwości formy FormStyle : fsMDIForm
Edit2 będzie wyświetlał 0,1,2...9,10,20,30 ...90,100,200,300...1000,2000.. itd
natomiast Label1 będzie wyświetlał 0,10,100,1000,10000

Czyżby programiści z Embarcadero coś przeoczyli.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: wtorek, 3 lipca 2018, 10:13
przez Mironas
Proton napisał(a):w kontrolce Label1 czasami się coś pojawi, jakby był problem z odświerzaniem formy.

Aby odświeżyć label spróbuj wykonać jedną z tych metod:
KOD cpp:     UKRYJ  
  Label1->Refresh();
  Label1->Repaint();
 

A wstawiając kod na forum stosuj znaczniki CPP.

lukagrom napisał(a):ten Berlin u mnie zawsze dopiero kompiluje się za 2 razem, za pierwszym pokazuje błędy adresowania.

Błędy czy ostrzeżenia?
Bo u mnie (Tokyo) przy kompilacji wysypuje się cała masa ostrzeżeń. Dzieje się tak przy wyłączonej opcji:
Packages >> Runtime Packages >> Build with runtime packages
Być może jest konflikt z jakimś doinstalowanym komponentem. W wolnej chwili przeinstaluję środowisko i może uda mi się namierzyć problem.

Re: Problem z kontrolką Label.

Nowy postNapisane: wtorek, 3 lipca 2018, 11:13
przez Proton
Z moich obserwacji wynika ,że nie jest to problem z odświerzaniem ale z konwersją liczby na tekst.

Dla ustawionego FormStyle : fsNormal lub fsStayOnTop Label wyświetla to samo co Edit ,
natomiast dla fsMDIForm
Label jakby sam się przeskalowywał dla liczb : od 0...9 wyświetla 0 ,od 10...99 wyświetla 10, od 100 ... 999 wyświetla 100, od 1000 ... 9999 wyświetla 1000, w zależności jaką wartość przekroczy wyświetlana liczba jest wyświetlana inna wartość konwersji.

Podczas kompilacji nie jest zgłaszany żaden błąd ani ostrzeżenie.
Obecnie testuję środowisko Berlin 10.1 i zaobserwowałem to dziwne zjawisko.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: środa, 4 lipca 2018, 10:54
przez polymorphism
Jak by to był problem z konwersją na tekst, to miałbyś problem z wyświetleniem wszystkich liczb. Zresztą po co konwertujesz dwa razy tę samą liczbę? Jedno wywołanie IntToStr wystarczy.

Re: Problem z kontrolką Label.

Nowy postNapisane: środa, 4 lipca 2018, 15:59
przez lukagrom
Nawiązaując jeszcze do podwójnej kompilacji u "mojego Berlina" to niemal zawsze, za pierwszym razem (a zawsze przy użyciu instrukcji new/delete) pokazuje się error - Access violation at address 6CCA18C10 in module 'ieframe.dll'. Read of address 000000. Na takie coś daje - Project->Build All Projects i wszystko za drugim razem kompiluje się i uruchamia bez problemu.

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 11:42
przez Proton
Do polymorphism.

Co masz na myśli pisząc o jednej konwersji , skoro używam Labela i Edita to robię dwie konwersje na tekst, można to zrobić jeszcze inaczej ale nie o to pytam. Przykładowy programik ma za zadanie sprawdzić poprawność konwersji liczb.

Problem jest w tym, że dla ustawionego FormStyle : fsMDIForm konwersja jest nieprawidłowa, podczas konwersji zmienna Licznik jakby była nieprawidłowo zaadresowana.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 12:14
przez polymorphism
Co masz na myśli pisząc o jednej konwersji

KOD cpp:     UKRYJ  
Edit1->Text = Label1->Caption = IntToStr(Licznik);

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 13:33
przez Proton
Do polymorphism

Jaki kompilator przyjmuje Ci taki zapis : Edit1->Text = Label1->Caption = IntToStr(Licznik);
Ale przejdźmy do meritum sprawy.

Nawet taki zapis :

Edit2->Text = InToStr(Licznik);
Label1->Caption = Edit2->Text;

powoduje na ekranie nieprawidłowe zachowanie się kontrolki Label1 , zjawisko to zachodzi dla środowiska XE6 oraz Berlin 10.1

Jeśli właściwość Label1->AutoSize ustawimy na false to Label1 w ogóle się nie zmienia na ekranie.

Czekam na merytoryczne podpowiedzi.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 16:26
przez Proton
cd.. problem z kontrolką Label.

Nowa informacja - jeśli kontrolkę Label1 wstawię na Panel to w/w problem znika.
Widocznie programiści coś namieszali z wyświetlaniem kontrolki Label , np: kontrolka StaticText zachowuje się prawie poprawnie tylko wlaściwość Transparent ma pewien problem.

Dzięki lukagrom , Mironas , polymorphism za podjęcie tematu.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 16:27
przez polymorphism
Jaki kompilator przyjmuje Ci taki zapis :

Każdy? Choć tu może być inaczej, bo Text i Caption są właściwościami. Sprawdzałeś?

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 16:47
przez Proton
Do polymorphism

dla środowiska Berlin 10.1
zapis : Edit2->Text = Label1->Caption = IntToStr(Licznik);
generuje błąd
[bcc64 Error] MAIN.CPP(61): no viable conversion from 'void' to 'TCaption' (aka 'System::UnicodeString')

środowisko XE6 też nie toleruje takiego zapisu.

Ed.

Re: Problem z kontrolką Label.

Nowy postNapisane: czwartek, 5 lipca 2018, 18:45
przez polymorphism
Ok, myślałem, że C++ Builder jest bardziej sprytny (nie używam go od dawna).