Kontrola stanu CheckBox w FastReport

Kontrola stanu CheckBox w FastReport
RA
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:9
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".

Kopiuj
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

edytowany 1x, ostatnio: Riddle
Riddle
@radziwil: Używaj oznaczników ```pas oraz ``` do formatowania kodu. Składnia > służy do cytatów użytkowników.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
RA
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:9
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

  • 01.png (74 KB) - ściągnięć: 9
edytowany 1x, ostatnio: radziwil
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

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


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
RA
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:9
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

  • 04.png (31 KB) - ściągnięć: 15
  • 05.png (6 KB) - ściągnięć: 8
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
1
radziwil napisał(a):

Kod procedury wygląda teraz tak:

05.png

A powinien tak:

Kopiuj
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
RA
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:9
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

  • 07.png (26 KB) - ściągnięć: 7
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12171
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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 4x, ostatnio: flowCRANE
RA
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:9
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.