Strona 1 z 2
Problem z kontrolką Label.

Napisane:
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.

Napisane:
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ę -
Na początku w - FormCreate, daje mu - 0.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
licznik=0;
}
i w głównym zdarzeniu Timera zwiększam co 1.
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.

Napisane:
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.
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.

Napisane:
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.

Napisane:
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:
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.

Napisane:
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.

Napisane:
ś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.

Napisane:
ś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.

Napisane:
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.

Napisane:
czwartek, 5 lipca 2018, 12:14
przez polymorphism
Co masz na myśli pisząc o jednej konwersji
Edit1->Text = Label1->Caption = IntToStr(Licznik);
Re: Problem z kontrolką Label.

Napisane:
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.

Napisane:
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.

Napisane:
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.

Napisane:
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.

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