Zabawa z sygnalizacją

0

Robię symulację sygnalizacji świetlnej.
Mam teraz problem, ponieważ, chcę zrobić przejścia, które się pojawiają, jeśli w checkboxie jest zaznaczona opcja i sygnalizator istnieje.
Problem polega na tym, że:

  • mimo, że opcja jest zaznaczona, po dodaniu sygnalizatora nie pojawia się przejście.
  • po usunięciu sygnalizatora przejście zostaje.
  • po wyłączeniu opcji sygnalizacji dla pieszych ona nie znika

Problem nie dotyczy sygnalizatora z numerem jeden, ponieważ on zawsze istnieje.
Kod, którym próbuję coś zdziałać:

procedure TSygnalizacja.przejsciaClick(Sender: TObject);
begin
  przramka1.Visible:= not przramka1.Visible;
  przczerwone1.Visible:= not przczerwone1.Visible;
  przzielone1.Visible:= not przzielone1.Visible;

  if (a>=2) then
  begin
    przramka2.Visible:= True;
    przczerwone2.Visible:= True;
    przzielone2.Visible:= True;
  end;

  if (a>=3) then
  begin
    przramka3.Visible:= True;
    przczerwone3.Visible:= True;
    przzielone3.Visible:= True;
  end;

  if (a>=4) then
  begin
    przramka4.Visible:= True;
    przczerwone4.Visible:= True;
    przzielone4.Visible:= True;
  end;

  if (a<4) then
  begin
    przramka4.Visible:= False;
    przczerwone4.Visible:= False;
    przzielone4.Visible:= False;
  end;

  if (a<3) or (ramka3.Visible=False) then
  begin
    przramka3.Visible:= False;
    przczerwone3.Visible:= False;
    przzielone3.Visible:= False;
  end;

  if (a<2) then
  begin
    przramka2.Visible:= False;
    przczerwone2.Visible:= False;
    przzielone2.Visible:= False;
  end;
end;

gdzie:
a - ilość sygnalizacji normalnych
przramka - przejście ramka
przczerwone - czerwone światło
przzielone - zielone światło.

Proszę o pomoc.

PS W a<3 jest testowy kod, który też nie działa.

@EDIT: 13:58 Sygnalizację dla pieszych idzie wyłączyć tylko, jeśli jest jeden sygnalizator.

0

Weż najlepiej zarchiwizuj cały swój kod tego projektu wraz z exekiem i dołacz do tego posta, bo nie wiemy jak ustawiasz to a. Mi się taki kod na sucho źle analizuje, bo nie wiem co chcesz osiągnąc. Wspominasz o jakims CheckBoxie, a tutaj masz klikanie w przycisk, który do końca nie wiem czy rozumiem co ma robić. Najlepiej również zamiast zmiennej a ustawiać sobie odpowiednio Tag tego przycisku w który klikasz i go później porównywać. Jak będziemy mieli kod to ktoś może coś poradzi, bo swój post napisałeś dawno i nikt nie odpowiedział, a ja też nie mam obecnie tyle wolnego czasu co wcześniej, ale jeżeli odpowiesz jeszcze dzisiaj to może do jutra coś poradzę.

0

Pomyliły mi się nazwy - oczywiście chodzi o CheckBoxa. Przypuszczalnie wystarczyłby mi kod, który sprawdza czy CheckBox jest zaznaczony i wówczas zastosować go na zasadzie:

begin
if (a<2) and (checkbox jest zaznaczony) then
przramka.Visible:=True;
else
przramka.Visible:=False;

Jak to nie zadziała, to wówczas poproszę Was o dalszą pomoc ;)

0

Sprawdzić czy CheckBox jest zaznaczony to mega banał. CheckBox posiada własnośc Checked.

0

Czyli jak ma sprawdzić? Wiem, głupi jestem xD

0

Ech - if'em, lub przez Visible := Costam.Checked. Przecież Checked to własnośc typu boolean. Jak nie ogarniasz takich podstaw, polecam napierw lekturę jakiś kursów z podstawami. Może być Kompendium Delphi na stronie 4p.

0

If'em będzie lepiej. Proszę tylko ten jeden kod. Jak nie zadziała, to zobaczymy ;)

0

Przyznam szczerze, że widziałem wcześniej Twój post, ale zupełnie nie mogłem się domyśleć, o co Ci chodzi. Dałem więc sobie spokój. Na Twoje szczęście jest olesio, który odpisał. Nie sądzę, aby komuś innemu się chciało.

Teraz, kiedy już wiadomo, jaki jest problem, to odpowiedź jest wręcz banalna. Jeżeli chodzi o ten kod:

if (a<2) and (checkbox jest zaznaczony) then
przramka.Visible:=True;
else
przramka.Visible:=False;

to trzeba napisać tak:

PrzRamka.Visible:= (a < 2) and CheckBox.Checked;

PS. Podziękowania należą się olesiowi

0

Dzięki Wam obu ;)

0

Prawie działało, jednak pozostawał jeden problem. Mianowicie, jeśli usunąłem jeden sygnalizator to przejście na niego zostaje ;) I chciałem, żeby się dodawały "na żywo".
Zmieniłem kod na:

procedure TSygnalizacja.il_kierChange(Sender: TObject);
begin
  a:= il_kier.Value;

[...]

  if (a>=2) and przejscia.Checked then
  begin
    przramka2.Visible:= True;
    przczerwone2.Visible:= True;
    przzielone2.Visible:= True;
  end;
  if (a>=3) and przejscia.Checked then
  begin
    przramka3.Visible:= True;
    przczerwone3.Visible:= True;
    przzielone3.Visible:= True;
  end;
  if (a=4) and przejscia.Checked then
  begin
    przramka4.Visible:= True;
    przczerwone4.Visible:= True;
    przzielone4.Visible:= True;
  end;

  if (a<2) or not przejscia.Checked then
  begin
    przramka2.Visible:=False;
    przczerwone2.Visible:=False;
    przzielone2.Visible:=False;
  end;
  if (a<3) or not przejscia.Checked then
  begin
    przramka3.Visible:=False;
    przczerwone3.Visible:=False;
    przzielone3.Visible:=False;
  end;
  if (a<4) or not przejscia.Checked then
  begin
    przramka4.Visible:=False;
    przczerwone4.Visible:=False;
    przzielone4.Visible:=False;
  end;
end;

procedure TSygnalizacja.przejsciaClick(Sender: TObject);
begin
  przramka1.Visible:= not przramka1.Visible;
  przczerwone1.Visible:= not przczerwone1.Visible;
  przzielone1.Visible:= not przzielone1.Visible;

  if (a>=2) and przejscia.Checked then
    begin
    przramka2.Visible:= True;
    przczerwone2.Visible:= True;
    przzielone2.Visible:= True;
  end;
  if (a>=3) and przejscia.Checked then
  begin
    przramka3.Visible:= True;
    przczerwone3.Visible:= True;
    przzielone3.Visible:= True;
  end;
  if (a=4) and przejscia.Checked then
  begin
    przramka4.Visible:= True;
    przczerwone4.Visible:= True;
    przzielone4.Visible:= True;
  end;

  if (a<2) or not przejscia.Checked then
  begin
    przramka2.Visible:=False;
    przczerwone2.Visible:=False;
    przzielone2.Visible:=False;
  end;
  if (a<3) or not przejscia.Checked then
  begin
    przramka3.Visible:=False;
    przczerwone3.Visible:=False;
    przzielone3.Visible:=False;
  end;
  if (a<4) or not przejscia.Checked then
  begin
    przramka4.Visible:=False;
    przczerwone4.Visible:=False;
    przzielone4.Visible:=False;
  end;
end;

i działa znakomicie ;) Wcześniej miałem problem, że nie przyjmowało przejscia.Checked bo nie wiedziało o co chodzi ;)
Dzięki za wszelką pomoc.
Plik exe: http://www.wrzuc.to/KsyA9pI5L.wt (przejścia jeszcze nie zmieniają kolorów, zostanie dodane w wersji 0.2)

PS Zmieniłem plik ikony, ale po kompilacji się nie pojawia, czemu?

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