Autor Beitrag
WinRar
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 05.05.10 19:09 
Sers!
In Informatik behandeln wir gerade die Anfänge von Delphi-Formularen (BtClick etc. Beispielsweise Ampel-Icons, welche auf Buttonclick umschalten oder Buttons, die die Hintergrundfarbe des Formulars ändern).

Genau hier liegt mein Problem:
Ich kenne den genauen Befehl zur Änderung des Formularhintergrundes nicht (mit if, then und elserealisiert).

Aufgabe:
Ein Formular mit dem Hintergrund rot erstellen. (unter Properties, Color clRed.
Dieses soll nun durch einen Buttonclick den Hintergrund blau erhalten.
Das wirkliche Problem ist allerdings:
Mit IF/ELSE soll realisiert werden, dass der Formularhintergrund beim Buttonclick beim roten Hintergrund blaum wird und beim blauen Hintergrund rot.


Meine Frage:
Mit welcher IF/ELSE-Konstellation erkenne ich automatisch die aktuelle Formularhintergrundfarbe und ändere sie dann auf die jeweils andere von rot (clRed) bzw. blau (clBlue) in der Eigenschaft (Property, Color)?

Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
      if /* Hier weiss ich nicht weiter :/ */      

TForm1.Color  = clRed
      then


end;

end.


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt


Zuletzt bearbeitet von WinRar am Mi 05.05.10 19:19, insgesamt 1-mal bearbeitet
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 05.05.10 19:16 
Hallo und :welcome: in der Entwickler-Ecke,

du hast es eigentlich fast - da ist nur ein T zu viel. ;-)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin
  if /* Hier weiss ich nicht weiter :/ */      

  Form1.Color  = clRed then
    Form1.Color := clBlue

end;


Gund: TForm ist der Name der Klasse. Du willst aber die Eigenschaft eines konkreten Objektes, also einer Instanz dieser Klasse verändern. Und das ist in der Regel Form1, ohne das T. Dafür ist das
ausblenden Delphi-Quelltext
1:
2:
var
  Form1: TForm1;

im Quelltext da. :D

Edit: Noch besser wäre natürlich, wenn man das "Form1." da auch weglässt und nur Color schreibt. ;-)

Aber den Titel des Topics könntest du noch ändern. Der sagt nämlich nicht viel über das eigentliche Problem aus. Einfach oben auf user defined image oder user defined image klicken und den Titel ändern.

_________________
We are, we were and will not be.
WinRar Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 05.05.10 19:26 
Danke erstmal für die nette Begrüßung hier im Forum, gibt´s nich oft, dass jemand sich extra die Mühe macht alles zu erläutern, wenn´s um Programmiersprachen geht :D

Das funktioniert zwar, aber die schwierige Aufgabe ist, zu erkennen, ob die momentane Hintergrundfarbe rot oder blau ist und daraufhin die jeweils andere anzunehmen.
Klicke ich das ganze also wie hier von rot auf blau, dann soll beim nächsten Click auch wieder auf rot gewechselt werden.
Wie realisier ich das?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mi 05.05.10 19:29 
mit einem else. ;)

dann kannst du schreiben:
ausblenden Quelltext
1:
2:
3:
wenn form1.farbe clblau ist dann
  form1.farbe soll clrot sein
andernfalls form1.farbe soll clblau sein;


darf ich dir gleich das Delphi-Wikibook und Christian's Crashkurs ans Herz legen? Da kannst du einige dieser Sachen nachlesen. ;)

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 05.05.10 19:29 
Dafür müsste man dann eine else-if-Kaskade bauen, wenn es nicht zuviele Farben sind. Wenn es mehr werden, sollte man mit einer case-of-Anweisung arbeiten, oder die Farben in einem Array verwalten und immer das nächste Array-Element nehmen.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
if Color = clred then
  Color := clblue
else
  if Color = clBlue then
    Color := clGreen
  else
    if Color = clGreen then
       Color := clwhite
    else 
      if Color = clWhite then
         Color := clred;

_________________
We are, we were and will not be.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 05.05.10 19:39 
Alternativ ginge ein Array:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
const
  colors: array[1 .. 5of TColor = (clRed, clBlue, clLime, clWhite, clBlack);

var
  current_color: Integer; //globale Variable, etwas unsauber, man könnte auch TForm.Tag nehmen.

procedure TForm1.Form1Create(Sender: TObject);
begin
  current_color := 1;
end;

procedure TForm1.Change_Color;
begin
   inc(current_color);
   if current_color > 5 then
      current_color := 1;
   Color := colors[current_color];
end;
Übrigens: Du hast da /* */ als Kommentar-Zeichen genutzt. In Delphi/Pascal kannst du über blah; //Kommentar einzelne Zeilen und über
ausblenden Delphi-Quelltext
1:
2:
3:
blah; {kommentar
über mehrere
Zeilen}
mehrere Zeilen auskommentieren.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Mi 05.05.10 21:13 
Color := Color shl (Integer(Color = clRed) * 16shr (Integer(Color = clBlue) * 16);
:lol: