Jestem początkujący więc wybaczcie pytanie ale nie mam kogo zapytać.
Wiemy kim jesteś, bo Twoje posty są bardzo charakterystyczne.
Jak zmienić grafikę Buttona po kliku (chodzi mi o button typu Start/Stop)
Klasa TButton
nie obsługuje grafik, do tego celu możesz użyć np. klasy TBitButton
lub TSpeedButton
(ten drugi jest kontrolką graficzną, więc wyróżnia się brakiem obsługi focusa). Za wyświetlanie obrazka w obu tych przyciskach odpowiada właściwość Glyph
, do której możesz załadować dowolny obrazek z dowolnego źródła.
Jak zrobić wokół niego przeźroczystość
Standardowe kontrolki posiadają standardowy mechanizm malowania swojej powierzchni, zgodny z bieżącym schematem systemu. Jeżeli potrzebujesz niestandardowego malowania to trzeba sobie taki komponent napisać. Albo zrobić protezę przycisku, np. używając komponentu typu TImage
.
(wyczytałem tutaj w serwisie że musi być to BMP ż kanałem alfa 32 bity (A8R8G8B8)
Bitmapy 32-bitowe są bardzo rzadko wykorzystywane, natomiast dużo bardziej popularne są grafiki PNG, więc takie sugeruję wykorzystać. Bitmapa też mogła by być i niekoniecznie 32-bitowa. Dla tych obrazów przezroczystość da się ustalić w inny sposób - określając kolor, który na ekranie nie będzie malowany. Są do tego właściwości Transparent
oraz TransparentColor
.
Jak zbudować instrukcje w procedurze
Pierwszy klik wykonuje coś tam
Drugi klik wykonuje coś innego
i tak na przemian
Chodzi mi o sam szkielet takiej instrukcji.
Na podstawie wartośći logicznej, zapisanej np. w polu klasy formularza. W konstruktorze klasy okna należy ustawić jej początkową wartość, a po kliknięciu sprawdzić jaką ma wartość, wykonać odpowiedni jej kod, a na koniec zanegować jej wartość za pomocą operatora Not:
type
TForm1 = class(TForm)
{..}
private
FState: Boolean;
private
procedure DoIfTrue();
procedure DoIfFalse();
end;
{..}
procedure TForm1.FormCreate(Sender: TObject);
begin
FState := True;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if FState then
DoIfTrue()
else
DoIfFalse();
FState := not FState;
end;
- pierwsze kliknięcie -
FState
zawiera wartość True
, więc zostanie wykonana metoda DoIfTrue
, na koniec wartość pola jest odwracana,
- drugie kliknięcie -
FState
zawiera wartość False
, więc zostanie wykonana metoda DoIfFalse
, na koniec wartość pola jest odwracana,
- trzecie kliknięcie -
FState
znów zawiera wartość True
, więc znów zostanie wykonana metoda DoIfFalse
, na koniec wartość pola jest odwracana,
- czwarte kliknięcie -
FState
znów zawiera wartość True
, więc znów zostanie wykonana metoda DoIfTure
, i tak dalej, i tak dalej...