Kontrola stanu CheckBox w FastReport

0

Witam

Może mi ktoś podpowiedzieć jak mogę w FastReport w Code (PascalScript) sterować stanem CheckBox. Od dwóch dni szukam w internecie, próbowałem różnych kombinacji, ale bez oczekiwanego skutku.
Potrzebuję ustawić CheckBox z "ptaszkiem" lub bez w zależności od wartości z formularza, ale mam problemy z wyłączeniem "ptaszka".

procedure NPSRASSS;
begin
CheckBox4.Visible := FALSE;
CheckBox4.Checked:=FALSE;
if (<FORMULARZ."A"> = 4)
       then (<"CheckBox4"> is True)  
       else CheckBox4 is False;                                               
end;

Może ktoś mnie poratować.

Pozdrawiam
Darek

0

Porównaj dwa wiersze ze swego kodu:
CheckBox4.Visible := FALSE;
a
else CheckBox4 is False
Czy nie widzisz czegoś co nasuwa uczucie "WTF?!"

0
_13th_Dragon napisał(a):

Porównaj dwa wiersze ze swego kodu:
CheckBox4.Visible := FALSE;
a
else CheckBox4 is False
Czy nie widzisz czegoś co nasuwa uczucie "WTF?!"

To co przedstawiłem, to są moje próby odnalezienia rozwiązania, ale niestety żaden z zapisów nie działa tak, jakbym tego sobie życzył, czyli, niezależnie jak zapiszę, to i tak CheckBox jest permanentnie zaznaczony, a zależy mi na tym, abym mógł nim sterować z poziomu Codu.01.png

1

a skąd wołasz tą funkcję NPSRASSS (btw nie dało się wymyślić lepszej nazwy?)

0
abrakadaber napisał(a):

a skąd wołasz tą funkcję NPSRASSS (btw nie dało się wymyślić lepszej nazwy?)

Dziękuję za podpowiedź. Już się poprawiłem i teraz pięknie działa. Co do nazwy, to są to pierwsze litery nazwy formularza.

04.png

Kod procedury wygląda teraz tak:

05.png

Pozdrawiam
Darek

1
radziwil napisał(a):

Kod procedury wygląda teraz tak:

05.png

A powinien tak:

procedure NPSRASSS(Sender: TfrxComponent)
begin
  CheckBox4.Checked := <FORMULARZ."A"> = 4;
  CheckBox5.Checked := False;
end;

Mniej kodu, od razu wiadomo o co chodzi. Sprawdź czy taka składnia jest poprawna. Przy okazji, ta procedura ma nazwę z tyłka NPSRASSS absolutnie nic nie mówi o tym, do czego służy — przyda się ją zmienić na coś sensownego.

0

Jest OK, dziękuję, dużo mniej pisania.
Zastanawiam się, czy udałoby się zaprząc pętlę np. for do ustawienia wszystkich CheckBox od 4 do 23 status False. Na początek wszystkie wyłączam, a później włączam tylko te, które należy.
07.png

0

Po co przypisujesz do tych wszystkich checkboxów False, skoro następnie nadpisujesz ich stan za pomocą <FORMULARZ."*"> = *? Przecież te wyrażenia zwracają wartości logiczne porównań, czyli albo False, albo True.

radziwil napisał(a):

Na początek wszystkie wyłączam, a później włączam tylko te, które należy.

Nie, to tak nie działa. Każdemu checkboxowi dwa razy ustawiasz wartość — najpierw False, a potem rezultat porównania. Nie ma to za wiele sensu, a poza tym mnożysz sporo linijek kodu.

Na pewno da się użyć pętli i odszukać kontrolki po nazwie, ale że ich stan ma być określony nie tylko na podstawie różnych formularzy, ale też porównań z jakimiś magicznymi intami, to wolałbym już zostawić tak jak jest (ale najpierw usunąć wszystkie ustawienia False), bo trudno tu znaleźć jakiś dobry dla pętli schemat. Dla 20-kilku checkboxów nie ma co kombinować z pętlami, bo tylko zaciemnisz kod i trudno będzie zrozumieć co w ogóle robi.

0

@furious programming:
OK, dziękuję wszystkim za przekazane sugestie i za okazaną pomoc.

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