Autor Beitrag
Headcracker
Hält's aus hier
Beiträge: 4

WIN XP, WIN Vista
Delphi 7, PROLOG
BeitragVerfasst: Mi 18.03.09 15:44 
Also ich habe folgendes Problem:
Ich möchte mit Hilfe des Timers erreichen, dass jede halbe Sekunde die Farbe des Formulars und die Schriftfarbe von 2 Buttons zwischen rot und schwarz wechselt.
Dabei gibt es jedoch ein seltsames Problem, was mich ziemlich verwirrt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
if Form2.Color:=clBlack then
  begin
    Form2.Color:=clRed;
    BitBtn1.Font.Color:=clBlack;
    BitBtn2.Font.Color:=clBlack;
  end
else
  begin
    Form2.Color:=clBlack;
    BitBtn1.Font.Color:=clRed;
    BitBtn2.Font.Color:=clRed;
  end;  
end;


Wie ihr seht, steht in der 3. Zeile ein Farbwert für die Farbe des Formulars als Bedingung. Wenn ich das Programm starten will, kommt allerdings die Fehlermeldung "Ausdruckstyp muss BOOLEAN sein". Für die nachfolgenden Form2.Color's werden keine Fehlermeldungen anzeigt.
Und ich hab noch nie gehört, dass eine simple if-then-Verzweigung unbedingt einen BOOLEAN-Wert in der Bedingung benötigt. Bei anderen Programmen verwende ich z.B. Zahlenwerte (z.B. if x<4 then), und da ist noch nie eine Fehlermeldung gekommen.

Noch seltsamer wird es mit folgendem Quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm2.Timer1Timer(Sender: TObject);
begin
if Form2.Color:=true then
  begin
    Form2.Color:=clRed;
    BitBtn1.Font.Color:=clBlack;
    BitBtn2.Font.Color:=clBlack;
  end
else
  begin
    Form2.Color:=clBlack;
    BitBtn1.Font.Color:=clRed;
    BitBtn2.Font.Color:=clRed;
  end;  
end;


Wenn ich dann also in der 3. Zeile, wie Delphi es verlangt, einen BOOLEAN-Wert einsetze (was ja eigentlich völlig sinnlos ist), dann kommt die Fehlermeldung "Inkompatible Typen: 'TColor' und 'Boolean'"

D.h., erst sagt Delphi es muss BOOLEAN sein, und dann beschwert es sich, dass es BOOLEAN ist.
Oder kann ich etwa die Farbe des Formulars nicht als Bedingung nehmen???

Ich hoffe dass ihr mir helfen könnt!
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 18.03.09 15:46 
Nicht so
ausblenden Delphi-Quelltext
1:
if Form2.Color := clBlack then					

sondern so
ausblenden Delphi-Quelltext
1:
if Form2.Color = clBlack then					

_________________
We are, we were and will not be.
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: Mi 18.03.09 15:53 
Zitat:
Und ich hab noch nie gehört, dass eine simple if-then-Verzweigung unbedingt einen BOOLEAN-Wert in der Bedingung benötigt. Bei anderen Programmen verwende ich z.B. Zahlenwerte (z.B. if x<4 then), und da ist noch nie eine Fehlermeldung gekommen.


Was denkst du was das Ergebnis einer der folgenden Abfragen ist?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
if Color = clBlack then
...
if Str = 'Test' then
...
if Int = 22 then


Sofern die verwendeten Variablen den abgefragten Wert enthalten, erhältst du als Auswertung wahr (True) also einen Boolean. Deshalb kann man auch sowas machen:
ausblenden Delphi-Quelltext
1:
Button1.Enabled := ListBox1.Items.Count > 0;  //Der Button wird nur aktiviert wenn die Listbox min. einen Eintrag enthält					
ffgorcky
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Mi 18.03.09 22:29 
Es ist doch ganz einfach zu erklären:
Die Abfrage, ob etwas gleich ist, ist nur mit dem Gleichheitszeichen zu versehen, während die Duppelpunkt-Gleich-Folge immer eine Zuweisung des rechten Wertes für/auf den linken ist!

also
if Label2.Caption='Hallo' then
wäre eine Abfrage, ob dieses denn so ist, während
Label2.Caption:='Hallo'
diesen Wert dort einträgt.
Reicht das so als Hilfe?

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
Headcracker Threadstarter
Hält's aus hier
Beiträge: 4

WIN XP, WIN Vista
Delphi 7, PROLOG
BeitragVerfasst: Do 19.03.09 10:18 
Uups! So ein dummer fehler von mir ... dabei ist doch klar, dass der Doppelpunkt da nicht hingehört ... war anscheinend zu offensichtlich, als dass ich den fehler bemerkt hätte^^