Odzwieżanie zawartosci TCategoryPanel - dziwna sytuacja.

0

Witam,
mam pewien problem, ktory moze wydawac sie banalnym, ale taki nie jest wcale...
Otoz posiadam xe5 delphi i polozylem sobie na formatce komponent TCategoryPanel, na tym komponencie położyłem TLabel.
Następnie chciałbym sterować wlasciwoscia Visible tego labelka (True, False).

Owy label NIE UKRYWA sie, jesli ustawie mu False Visible z poziomu kodu.
jest problem z odświezaniem, nie moge jednak mimo kilku prob tego zwalczyc (repaint,refresh nie dzialaja...).

Dopiero troche lamersko (ale skutecznie) jakims sposobem panel sie 'odrysowuje' gdy zmienie mu wysokosc i zaraz potem ustawie na poprzednia wartosc. Label wtedy znika, ale cala formatka miga.

Prosze o jakies sugestie, dzieki, pozdro

0

Label wtedy znika, ale cala formatka miga.

Ustaw formularzowi DoubleBuffered na True i nie będzie migać :]

Owy label NIE UKRYWA sie, jesli ustawie mu False Visible z poziomu kodu.
jest problem z odświezaniem, nie moge jednak mimo kilku prob tego zwalczyc (repaint,refresh nie dzialaja...).

I zapewne zmiana Caption także nie działa? Nie wiem w jaki sposób odwołujesz się do tego komponentu (do etykiety), ale skoro żadna z podanych metod nie powodowała żądanych efektów, to:

  • nie wywołujesz metody na wskazanym komponencie,
  • nie posiadasz prawidłowej referencji do etykiety,
  • TCategoryPanel jest zabugowany,
  • kompilator Delphi popsuł się i generuje zły kod;
    To tak pół żarten pół serio, bo bez kodu raczej niewiele można doradzić; Więc albo pokaż problematyczny kawałek kodu, albo spróbuj sam użyć debugera i znaleźć przyczynę problemu.
0

Napisałem wszystko co trzeba :)

Label1 na formatce i potem spod Buttona Label1.Visible := False;

Label dalej jest widoczny.

DoubleBuffered oczywiście nie działa :)

1

Wygląda na to, że to znany i nie poprawiony bug. http://qc.embarcadero.com/wc/qcmain.aspx?d=107947 masz tam też poradę na obejście tego problemu, ale też nie jest zbyt elegancki.

0

i wszystko jasne... od 3 lat tego nie poprawili :)

0

@dmicha3,

Prost patent:
Dodaj pusty StaticText do CategoryPanel i linię:

StaticText1.Visible:=not StaticText1.Visible;

po Twoich zmianach.

miab

dodanie znacznika <code class="delphi"> - @furious programming

0

Napisałem wszystko co trzeba :)

Nie wszystko, bo stan Visible można zmienić na bardzo wiele sposobów - dlatego poprosiłem o kod;

DoubleBuffered oczywiście nie działa :)

DoubleBuffered property (TWinControl) napisał(a)

When DoubleBuffered is false, the windowed control paints itself directly to the window. When DoubleBuffered is true, the windowed control paints itself to an in-memory bitmap that is then used to paint the window. Double buffering reduces the amount of flicker when the control repaints, but is more memory intensive.

Ustawienie tej właściwości na True powinno wystarczająco przyspieszyć przemalowywanie zawartości okna, tak aby nic nie migało; Jeśli tak się nie dzieje, to strasznie mułowate są te komponenty (albo sprzęt za słaby);


W każdym razie opcja trzecia, którą podałem w poprzednim poście jest prawdziwa :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1