![]() |
Fehler: IF: Kein Teil eienr Menge (Bedingung)
Code:
Dieser Code erzeugt bei mir die folgende Fehlermeldung:
for Runde:=0 to Length(TheColor1) do
if(TheColor1[1]<>'$')and(Ord(TheColor1[Runde])<>[48..57])and(Ord(TheColor1[Runde])<>[65..70]) then ... Zitat:
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
ein befremdlicher Ansatz aber was Du suchst ist wohl
Delphi-Quellcode:
not (Ord(TheColor1[Runde]) in [65..70])
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
von der Struktur her sehe ich keinen Fehler. Teile mal deine IF-Anweisung in 3 Abfragen auf. Dann siehst du, bei welcher es hakt.
Ich denke aber, dass es scheinbar in der Zeile davor hakt. Bernhard |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Ja, habe ich getan. Ich habe den Code auch etwas abgeändert. Trotzdem der gleiche Erfolg:
Code:
Manchmal sieht man den Wald vor lauter Bäumen nicht. Ich bin mir ganz sicher, der Fehler ist sehr dumm und leicht zu beheben. Trotzdem gelingt es mir bis jetzt nicht. Brüte schon seit Stunden darüber...
IsColor:=True;
if(TheColor1[1]<>'$') then IsColor:=False; for Runde:=0 to Length(TheColor1) do begin if not(Ord(TheColor1[Runde]) in [48..57])and not(Ord(TheColor1[Runde]) in [65..70]) then IsColor:=False; end; |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Delphi-Quellcode:
for Runde:=2 to
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
"Runde:=2 to ..."?
Ich denke auch, "0" war falsch. Ich habe jetzt Runde bei "1! anfangen lassen. Nein, warte! Du hast Recht! Denn [1] ist ja das "$"-Zeichen, also geht es erst bei [2] los! Danke! Aber es handelt sich um einen Fehler, der beim Compilieren entsteht, nicht zur Laufzeit. Da muß also etwas anderes, Gravierendes nicht stimmen. Hier erneut die Fehlermeldungen: Zitat:
Code:
IsColor:=True;
if(TheColor1[1]<>'$') then IsColor:=False else begin for Runde:=2 to Length(TheColor1) do begin if (not Ord(TheColor1[Runde]) in [48..57]) and (not Ord(TheColor1[Runde]) in [65..70]) then IsColor:=False; // LINE 351, Fehler-Cursor zwischen "[Runde])" und " in [48" end; end; |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
kannst du uns dann noch sagen, welche der Zeilen die Nummer 351 hat?
Bernhard PS: Starte Delphi und deinen Rechner mal neu, weil da weder ein TObject ist, noch ein Pointer. |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Auch nach Restart das selbe Progblem. ich habe etwas zum vorherigen Posting hinzugefügt (dortiger Programm-Code).
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
irgendeine gleichnamige Variable von einem anderen Typ irgendwo in Deinem Source ...?
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Nein, nirgends. Worum es mir eigentlich nur geht, ist festzustellen, ob der String entweder einen Farbwert wiedergibt (z.B. "$00004F4F") oder den Namen einer Farbe (z.B. "clBlack"). Was ich in Delphi vermisse, ist eine Testfunktion wie "IsColor" oder "IsReal", wie ich es von einigen anderen Programmiersprachen her kenne.
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Delphi-Quellcode:
function CharIsHexDigit(c:char):Boolean;
begin Result := c in ['0'..'9','A'..'F','a'..'f']; end; function IsHexColor(const s : string):boolean; var i : integer; begin Result := (Length(s) >= 7{Mindestlänge}) and (s[1]='$'); if not Result then exit; for i := 2 to length(s) do begin if not CharIsHexDigit(s[i]) then begin result := False; Exit; end; end; end; |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Vielleicht hilft Dir die Funktion
![]() |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Warum nimmst Du nicht die Funtion StringToColor, gekapselt mit Try Except?
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Du schreibst
Delphi-Quellcode:
es muss aber wie folgt lauten
If ( not Ord( Foo ) in [..] ) then
Delphi-Quellcode:
.
if not ( Ord( Foo ) in [..] ) then
Das
Delphi-Quellcode:
muss aus der Klammer raus
not
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
sx2008 und alle anderen: vielen Dank, Ihr habt mir ein sehr großes Stück weitergeholfen!
Es gibt nun noch ein anderes Problem, welches ich lösen muß. Beim Schließen des Programmes werden in der INI-Datei die vom user festgesetzten Farben gespeichert. Mir fällt aber auf, daß einige Farben nicht als beispielsweise "$00FFDDAA" gespeichert werden, sondern beispielsweise als "clBlue". Dies gibt Probleme. Wie kann ich den Farbwert von cl-definierten Farben als $-Werte speichern? |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
wenn Du meinen Vorschlag auf #13 verwendest
(StringToColor) hast Du die Farbe in einer TColor Variablen diese kannst Du dann per '$'+IntToHex(c,8) ausgeben. |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Ein letztes Problem in Sachen Farbe und Farbverarbeitung vorerst:
Code:
gibt mir diesen Fehler:
var
TheColor1, TheColor2: String; TColor1, TColor2: TColor; (1723) TheColor1:=ColorToString(Label1.Font.Color); (1724) TheColor2:=ColorToString(Label1.Color); (1725) IdentToColor(TheColor1,TColor1); (1726) IdentToColor(TheColor2,TColor2); Zitat:
Hmmm... Woran liegt's? |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Das Problem dabei ist, dass die Funktion als folgende deklariert ist:
Code:
Ich weiss gerade nicht was fuer Typ TColor explizit ist, ist aber auch egal, denn die Funktion verlangt ausdruecklich den Referenztyp Longintund erlaubt nicht den Typ TColor!
function IdentToColor(const Ident: string; var Color: Longint): Boolean;
Hab's eben schnell mit TColor getestet und bekam den gleichen Fehler, aber mit LongInt hats funktioniert!
Code:
Gruss Jakunar
var
TColor1: LongInt; TheColor1: String; begin IdentToColor(TheColor1, TColor1) |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Ich weiß nicht ob D7 hier noch ein Problem hat, aber:
Zitat:
Delphi-Quellcode:
IdentToColor(TheColor1, Integer(TColor1));
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Ahhh, DAS hat schon mal weitergeholfen. Vielen Dank an Euch.
Ich muß nun zusehen, wie ich TColor in LongInt umwandle. Wenn ich dafür eine Lösung finde, alleine oder zusammen), dann sollte dies endlich alles funktionieren. Ich schaue moch mal im Internet nach einer Lösung um. Aber wenn hier jemand eine Idee hat, dann würde ich mich sehr freuen. |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Du musst nicht nicht umwandeln nur zuweisen
Longword, LongInt, Int32, TColor, Integer, Cardinal Int32 , alles 4 Byte im Speicher .... |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Danke für Deine schnelle Antwort. Zuweisen... Ich arbeite zwar schon seit Jahren mit Delphi (7), aber mit Speicherzuweisungen habe ich noch nie gearbeitet. Ich weiß ehrlich gesagt nicht, wie ich dies bewerkstelligen soll. Ich hatte gerade folgendes probiert: "ThisColor1:=ColorToString(GlowLabel1.Font.Color); "
Wobei ThisColor1 vom Typ LONGINT ist. Delphi sagt: "[Error] Box1.pas(1726): Incompatible types: 'Integer' and 'String'" Aber ich habe mir inzwischen natürlich auch eigene Gedanken gemacht: die letzten sechs Ziffern des "$"-Wertes sind ja Hexadezimalziffern, in drei Blöcken. Außerdem weiß ich, daß jede Farbe auch durch eine sehr große Zahl (LongInt?) repräsentiert wird. Es gibt da bestimmt Wege, dieses Dreierpaket an Hex-Werten in so einen Wert umzuwandeln. |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Delphi-Quellcode:
EDIT
ThisColor1:=GlowLabel1.Font.Color;
StringToColor liefert dir aus einem String ein TColor welches Du in einem Longint oder Cardinal ablegen kannst. |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Irgendwie bewege ich mich noch immer auf dem Holzpfad. Ich komme einfach, trotz all Deiner Hilfen, nicht weiter. Ich habe Deinen Vorschlag (Color in LongInt umzuwandeln) aufgegriffen, finde aber bis jetzt keine entsprechende Delphi-Funktion zum Umwandeln. Nur ColorToRGB, ColorToString.
Mir geht es ja nur darum, in der programmeigenen INI-Datei die Farben des Benutzers abzuspeichern, aber nicht als "cl"-Wert, sondern nur als "$"-Wert. Jedoch, wenn der Benutzer sich eine Farbe im ColorDialog aussucht, kann es manchmal sein, daß diese Farbe als "cl"-Wert weitergegeben wird und nicht als "$"-Wert. StringToColor erzeugt doch auch Farbwerte wie "clRed", wenn der Benutzer die Farbe RGB FF 00 00 (reines rot) ausgesucht hatte. Und Dein Zitat stimmt: das Problem steckt wirklich in den meisten Fällen zwischen den Ohren. Ich hoffe, ich fange nicht an, Euch alle zu langweilen mit meinen ewigen Fragen... UPDATE Ich habe jetzt eine andere Lösung gefunden:
Code:
var
TheColor1, TheColor2: String; TheColor1:=TColorToHex(Sender,GlowLabel1.Font.Color); TheColor2:=TColorToHex(Sender,GlowLabel1.GlowColor); TheColor1:='$00'+Copy(TheColor1,5,2)+Copy(TheColor1,3,2)+Copy(TheColor1,1,2); TheColor2:='$00'+Copy(TheColor2,5,2)+Copy(TheColor2,3,2)+Copy(TheColor2,1,2); function TAlpha.TColorToHex(Sender: TObject; Color: TColor): string; begin Result:=IntToHex(GetRValue(Color),2)+IntToHex(GetGValue(Color),2)+IntToHex(GetBValue(Color),2); end; function TAlpha.HexToTColor(Sender: TObject; sColor: string): TColor; // Nicht benutzt begin Result:=RGB(StrToInt('$'+Copy(sColor,1,2)),StrToInt('$'+Copy(sColor,3,2)),StrToInt('$'+Copy(sColor,5,2))); end; Zitat:
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Es gibt ja immer mehrere Wege für eine Lösung, aber nur wenig smarte:
Delphi-Quellcode:
var
MyColor : TColor; MyColorStr : String; tmpInt : Int64; begin // Farbe in einen Hex-String umwandeln MyColorStr := '$' + IntToHex( MyColor ); // String ( Integer oder Hex-Wert ) in eine Farbe umwandeln if TryStrToInt64( MyColorStr, tmpInt ) and ( tmpInt >= -$7FFFFFFF-1 ) and ( tmpInt <= $7FFFFFFF ) then MyColor := tmpInt else raise Exception.CreateFmt( '"%s" ist keine Farbe!', [ MyColorStr ] ); end; |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Zitat:
Delphi-Quellcode:
kann von Haus aus mit Hex-Werten umgehen, wenn das $-Zeichen vorangestellt wird.
StrToInt
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Auch 'ne nette Lösung. Kürzer und wesentlich eleganter als meine.
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
schau mal ins Posting #16
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Ohhhh. Stimt. Vollkommen richtig. Da habe ich Dir großes Unrecht getan, Bummi. Du warst der erste mit diesem Lösungsansatz. Zu diesem Zeitpunkt nahm ich aber noch an, daß jene Funktion auch "cl"-Werte erzeugt, nicht nur "$"-Werte, deswegen hatte ich gezögert, diese Lösung zu benutzen. Erst als Sir Rufo direkt erwähnte, daß jene Funktion NUR "$"-Werte erzeugt, habe ich sie näher betrachtet. Mein Fehler. Umso mehr Dank an Dich.
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Zitat:
Der Farbwert Rot wird durch folgenden HexCode dargestellt
Code:
.
$000000FF
Mir deiner Logik machst du daraus aber
Code:
.
FF0000
Beim Einlesen drehst du es zwar wieder richtig ... aber jeder der die gespeicherten Werte kontrollieren will und deinen Code nicht kennt ... :stupid: Es heißt zwar RGB aber die einzelnen Farbwerte werden im HexCode nicht wie Text sondern wie eine Zahl betrachtet.
Code:
Wird ein Wort länger, dann "wächst" es nach rechts, aber eine Zahl ...
Text:
a ab abc abcd
Code:
Zahl
1 12 123 1234 |
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
@SvenLittkowski: Dir ist schon bewusst das deine letzten Fragen nichts mehr mit der ursprünglichen Frage zu tun haben und rein gar nicht zum Titel passen, oder? Bitte erstelle zukünftig für eine neue Frage auch ein neues Thema. :-) Das hat den Vorteil das du auch einen passenden Titel vergeben kannst was dazu führt das andere mit dem gleichen Problem über die Suche auch die Lösung finden können.
|
AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
Jens: ja, stimmt, es hat sich aber so entwickelt. Aber da ich die Lösung ja inzwischen habe, kann dieser Thread als "gelöst" markiert werden.
RGB-HexWerte: die sind verdreht, stimmt. Ich mache dies bewußt, um eigentlich Fremde etwas zu demotivieren, in der INI herumzuexperimentieren. :-) Vielen Dank an Euch alle. Ihr habt mir alle bei der Lösung geholfen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz