Zmina koloru obiektu po kliknięciu.

2012-08-12 20:28

Rejestracja: 7 lat temu

Ostatnio: 7 lat temu

0

Witam

Jestem początkujący w tym temacie, dlatego proszę o pomoc.

Mam koło w kolorze czerwonym, po kliknięciu przycisku zmienia ono kolor na niebieski. Chciałbym, by kolejne kliknięcie przywróciło z powrotem kolor czerwony.
Pracuję na programie Borland Delphi Enterprise Lite Edition 7.3.2.4

Fragment kodu źródłowego:

 object Shape23: TShape
    Left = 592
    Top = 600
    Width = 41
    Height = 41
    Brush.Color = clred
    Pen.Style = psDot
    Shape = stCircle
  end 
 object Button23: TButton
    Left = 624
    Top = 184
    Width = 17
    Height = 17
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clblue
    Font.Height = -3
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    ParentFont = False
    TabOrder = 36
    OnClick = Button23Click
  end 

Dopiero się uczę, pracuję z książką i słabo mi idzie.
Proszę o pomoc, jakąś wskazówkę.
Dziękuję i Pozdrawiam

edytowany 1x, ostatnio: olesio, 2012-08-13 00:43
Dlaczego wyciąłeś to z *.dfm? :> - furious programming 2012-08-12 20:34

Pozostało 580 znaków

2012-08-12 20:34

Rejestracja: 14 lat temu

Ostatnio: 1 minuta temu

Lokalizacja: Gorlice

0
procedure TForm1.Button1Click(Sender: TObject);
const
  COLORS: array [Boolean] of TColor =(clRed, clBlue);
begin
  Shape1.Brush.Color:= COLORS[Shape1.Brush.Color = clRed];
end;

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
Ubiegłeś mnie... Widzę, że Ty też lubisz macierze o typowanym zakresie :> - furious programming 2012-08-12 20:46

Pozostało 580 znaków

2012-08-12 20:45
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 6 godzin temu

Lokalizacja: Tuchów

0
hadid napisał(a)

Mam koło w kolorze czerwonym, po kliknięciu przycisku zmienia ono kolor na niebieski. Chciałbym, by kolejne kliknięcie przywróciło z powrotem kolor czerwony.

Ja zwykle sposobów jak mrówków;

Skoro masz taką właściwość w obiekcie klasy TShape jak Brush.Color = clRed, to możesz ją zmienić na inną (oczywiście musisz to zaprogramować w zdarzeniu Button23Click);

Możesz to zrobić tak:

procedure TForm1.Button23Click(Sender: TObject);
const
  aColors: array [Boolean] of TColor = (clRed, clBlue);
begin
  Shape23.Brush.Color := aColors[Shape23.Brush.Color = clRed];
end;

Konstrukcja jest bardzo prosta: statyczna macierz typowana logicznie z dwoma kolorami; Zasada działania: jeśli warunek Shape23.Brush.Color = clRed jest spełniony - ustawia kolor clRed, jeśli nie jest spełniony - clBlue;

Oczywiście można to załatwić warunkiem bez macierzy:

procedure TForm1.Button23Click(Sender: TObject);
begin
  if Shape23.Brush.Color = clRed then
    Shape23.Brush.Color := clBlue
  else
    Shape23.Brush.Color := clRed;
end;

Jak wolisz; Mnie jednak bardziej podoba się z macierzą ;-)


Edit: spóźniłem się, @kAzek był szybszy...


edytowany 2x, ostatnio: furious programming, 2012-08-12 20:48

Pozostało 580 znaków

2012-08-17 19:35

Rejestracja: 7 lat temu

Ostatnio: 7 lat temu

0

Dziękuję za tak szybką odpowiedź

Mam jednak kolejny problem. Postąpiłem według waszych instrukcji i dopisałem warunek z macierzą dla każdego zdarzenia.
I wiem, że teraz powinienem wykorzystać funkcję "compile" bądź "build" w programie. Ale okna są "zamrożone". Nie mogę również wykorzystać funkcji "run" by sprawdzić czy wszystko działa jak należy. Pewnie o czymś zapomniałem.

W katalogu roboczym posiadam pliki unit1.ddp, unit1.dfm oraz unit1.pas.
Może ktoś byłby w stanie rozwiązać mój problem.

Dziękuję i Pozdrawiam
hadid

"W katalogu roboczym posiadam pliki unit1.ddp, [...]" - to jakiego Ty kompilatora używasz...? - furious programming 2012-08-17 23:49

Pozostało 580 znaków

2012-08-17 20:51
Moderator

Rejestracja: 12 lat temu

Ostatnio: 3 tygodnie temu

Lokalizacja: Szczecin

0

Najpiew ogarnij postawy, poczytaj kursy, dopiero później bierz się za pisanie jakichkolwiek własnych programów i zanim zapytasz na forum, pokombinuj chwilę samodzielnie. Bo z plików jakie wyminiłeś wynika, że najprawdopodobniej chcesz skompilować sam unit bez otwartego projektu, a to jest niemożliwe. Najlepiej utwórz nowy projekt i zrób to na nowo, bo zdalnie cięzko ocenić co jeszcze namieszałeś przy braku podstawowej wiedzy. Jeżeli masz otwarty projekt i prawidłowo zainstalowane środowisko to nie spotkałem się raczej z przypadkiem aby Delphi nie chciało go spróbować uruchomić lub skompilowac. Pokazując ewentualne błedy jeżeli takowe są w kodzie od strony składniowej. A pliki możesz też dodać do nowego projektu lub usunąc inne moduły. Polecam jednak później zapisać wszystko do tego samego nowoutworzonego podkatalogu (najlepiej trzymać się zasady: jeden projekt - jeden katalog z potrzebnymi plikami), aby później nie mieć ścieżek względnych w sekcji uses projektu w stylu: nieuzywamgooglewiecjestemnoob in '..\..\..\..\FilmikiDlaDoroslych\nieuzywamgooglewiecjestemnoob.pas; i tym podobne.


edytowany 5x, ostatnio: olesio, 2012-08-17 20:58
Witam Chciałbym ponownie zaznaczyć, że jestem początkujący w tym temacie. Chciałem napisać swój pierwszy skromny program i widzę, że nie jest to łatwe. Korzystam z książek, szukam w Internecie i niestety sprawy, które dla was są banalne i oczywiste, sprawiają wiele problemów. Nad moim programem pracuję już tydzień, nie bardzo to wychodzi, dlatego każde wsparcie na tym etapie jest dla mnie na wagę złota. Niemniej jednak dziękuję za cenne uwagi. Dziękuję i Pozdrawiam hadid - hadid 2012-08-17 22:17

Pozostało 580 znaków

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