Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Fehler: IF: Kein Teil eienr Menge (Bedingung) (https://www.delphipraxis.net/157921-fehler-if-kein-teil-eienr-menge-bedingung.html)

Bummi 31. Jan 2011 17:04

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 ....

SvenLittkowski 31. Jan 2011 17:14

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.

Bummi 31. Jan 2011 17:19

AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
 
Delphi-Quellcode:
ThisColor1:=GlowLabel1.Font.Color;
EDIT

StringToColor liefert dir aus einem String ein TColor welches Du in einem Longint oder Cardinal ablegen kannst.

SvenLittkowski 1. Feb 2011 04:49

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:

Zitat von Delphi 7
Nun stimmt's!

Dieses Thema kann hiermit beendet werden. :-)

Sir Rufo 1. Feb 2011 11:45

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;

Sir Rufo 1. Feb 2011 11:47

AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
 
Zitat:

Zitat von Sir Rufo (Beitrag 1078789)
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;

btw:
Delphi-Quellcode:
StrToInt
kann von Haus aus mit Hex-Werten umgehen, wenn das $-Zeichen vorangestellt wird.

SvenLittkowski 1. Feb 2011 16:22

AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
 
Auch 'ne nette Lösung. Kürzer und wesentlich eleganter als meine.

Bummi 1. Feb 2011 16:43

AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
 
schau mal ins Posting #16

SvenLittkowski 2. Feb 2011 04:00

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.

Sir Rufo 2. Feb 2011 10:09

AW: Fehler: IF: Kein Teil eienr Menge (Bedingung)
 
Zitat:

Zitat von SvenLittkowski (Beitrag 1078889)
Auch 'ne nette Lösung. Kürzer und wesentlich eleganter als meine.

Die Lösung ist nicht nur eleganter sondern auch korrekt.

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:
Text:
a
ab
abc
abcd
Wird ein Wort länger, dann "wächst" es nach rechts, aber eine Zahl ...
Code:
Zahl
   1
  12
 123
1234


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr.
Seite 3 von 4     123 4      

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