Entwickler-Ecke
Sonstiges (Delphi) - Borland Delphi (6 bzw. 7) - Formulare mit BtClick verändern
WinRar - Mi 05.05.10 19:09
Titel: Borland Delphi (6 bzw. 7) - Formulare mit BtClick verändern
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:
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 public 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
Gausi: Delphi-Tags hinzugefügt
Gausi - 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. ;-)
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
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

oder

klicken und den Titel ändern.
WinRar - 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?
Gausi - 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.
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; |
JayEff - Mi 05.05.10 19:39
Alternativ ginge ein Array:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| const colors: array[1 .. 5] of TColor = (clRed, clBlue, clLime, clWhite, clBlack);
var current_color: Integer; 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; einzelne Zeilen und über
mehrere Zeilen auskommentieren.
Tryer - Mi 05.05.10 21:13
Color := Color shl (Integer(Color = clRed) * 16) shr (Integer(Color = clBlue) * 16);
:lol:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!