Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi String & Cardinal (https://www.delphipraxis.net/160208-string-cardinal.html)

Muellermilchtrinker 2. Mai 2011 18:20

String & Cardinal
 
Hallo DP,

ich hab mal wieder ein kleines Problemchen. ;) Alsoich hab eine Funktion, die möchte die Schriftfarbe in einer 8stelliger Hex. Soweit so gut. Wenn ich diese fest definiere mit $FFFFFFFF dann passt alles. Jetzt hab ich aber folgendes: Meine Schriftfarbe steht genau in dem Format: $FFFFFFFF in einer Stringvariable. Wie kann ich diese nun übergeben? Wenn ich einfach die Variable hinschreibe, dann kommt eine Meldung Inkompatible Typen String und Cardinal.
Schonmal danke für eure Hilfe.

ConnorMcLeod 2. Mai 2011 18:26

AW: String & Cardinal
 
Was spricht gegen
Delphi-Quellcode:
  color := StrToInt('$FFFFFFFF');
?

Muellermilchtrinker 2. Mai 2011 18:27

AW: String & Cardinal
 
Hab ich schon probiert: Die Funktion nimmt dies nicht an, auch wenn ich mir die Zahl ausgeben lasse und diese dann fest rein schreibe. Es funktioniert nicht.

alfold 2. Mai 2011 18:31

AW: String & Cardinal
 
Gibst du den wert ein(Tedit) oder ist der Wert fix?
Fix, dann nimm eine Variable von TColor.
Im Edit gibt es glaube ich StringToColor
Gruss alfold

ConnorMcLeod 2. Mai 2011 18:36

AW: String & Cardinal
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098408)
Die Funktion nimmt dies nicht an

Welche Funktion ist das? Bei mir geht's problemlos (D2010).

Muellermilchtrinker 2. Mai 2011 18:40

AW: String & Cardinal
 
Keine offizielle von Delphi. Ist eine aus einer DLL

StringToColor ging auch nicht. Da bekomm ich immer zu Laufzeit den Error "" ist kein gültiger Integerwert

EWeiss 2. Mai 2011 18:40

AW: String & Cardinal
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098408)
Hab ich schon probiert: Die Funktion nimmt dies nicht an, auch wenn ich mir die Zahl ausgeben lasse und diese dann fest rein schreibe. Es funktioniert nicht.

Denke es liegt am Alpha Channel ;)
Versuchs mal mit '$FFFFFF'

Hatte das gleiche problem übergehst du den Alpha Cannel dann wird die Farbe nicht gesetzt.
Wenn der Alpha Channel nicht den Wert 255 hat! Aber achtung in Win7 und Vista ist dieser angegebene Wert Schwartz also Transparent
Das kannst nur umgehen in dem du den wert um eins verringerst also 254 für Alpha.

Zitat:

StringToColor
logisch da hier ein RGB und nicht ein ARGB verarbeitet wird.
Das gleiche bei color du kannst nur RGB werte nicht ARGB übergeben.

gruss

alfold 2. Mai 2011 18:41

AW: String & Cardinal
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098417)
Keine offizielle von Delphi. Ist eine aus einer DLL

StringToColor ging auch nicht. Da bekomm ich immer zu Laufzeit den Error "" ist kein gültiger Integerwert

dann must Du prüfen ob der string leer ist!

gruss alfold

Muellermilchtrinker 2. Mai 2011 18:44

AW: String & Cardinal
 
Zitat:

Zitat von alfold (Beitrag 1098420)
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098417)
Keine offizielle von Delphi. Ist eine aus einer DLL

StringToColor ging auch nicht. Da bekomm ich immer zu Laufzeit den Error "" ist kein gültiger Integerwert

dann must Du prüfen ob der string leer ist!

gruss alfold

dieser ist ja auch nicht leer ;) ich weiß, dass da was drin steht :stupid:

EDIT: Ach und RGB nimmt die Funktion auch nicht. Die Farbe muss ARGB sein ;)

BUG 2. Mai 2011 18:46

AW: String & Cardinal
 
Wie wäre es mit sowas in der Art?
Delphi-Quellcode:
function HexToCardinal(x: String): cardinal;
var i: integer;
begin
  result := 0;
  if (length(x)*4 > SizeOf(cardinal)*8) then; // ERROR;
  for i := 1 to length(x) do
  begin
    case x[i] of
      '0'..'9': result := (result shl 4) or (ord(x[i])- ord('0'));
      'a'..'f': result := (result shl 4) or (ord(x[i])- ord('a') + 10);
      'A'..'F': result := (result shl 4) or (ord(x[i])- ord('A') + 10);
      else; //ERROR;
    end;
  end;
end;

EWeiss 2. Mai 2011 18:48

AW: String & Cardinal
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098421)
Zitat:

Zitat von alfold (Beitrag 1098420)
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098417)
Keine offizielle von Delphi. Ist eine aus einer DLL

StringToColor ging auch nicht. Da bekomm ich immer zu Laufzeit den Error "" ist kein gültiger Integerwert

dann must Du prüfen ob der string leer ist!

gruss alfold

dieser ist ja auch nicht leer ;) ich weiß, dass da was drin steht :stupid:

EDIT: Ach und RGB nimmt die Funktion auch nicht. Die Farbe muss ARGB sein ;)

Dann mußt du sie vorher parsen damit du den richtigen wert für den AlphaChannel an Color übergibst.
Color erwartet RGB.. ODER?

Hmm hab da wohl was falsch verstanden..
Aber egal ;)

gruss

alfold 2. Mai 2011 18:56

AW: String & Cardinal
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098417)
StringToColor ging auch nicht. Da bekomm ich immer zu Laufzeit den Error "" ist kein gültiger Integerwert

das kann nicht sein! das passiert nur wenn der string leer ist!
ansonsten steht "blalbal" ist kein gültiger integerwert!

gruss alfold

Muellermilchtrinker 2. Mai 2011 18:57

AW: String & Cardinal
 
OK, ich nehm alles zurück. Also StrToInt ging doch. Mein String wurde erst später befüllt bzw. war meine Befüllung an der falschen Stelle, deswegen war der doch leer. Upps :oops:

Sir Rufo 2. Mai 2011 22:15

AW: String & Cardinal
 
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098429)
OK, ich nehm alles zurück. Also StrToInt ging doch. Mein String wurde erst später befüllt bzw. war meine Befüllung an der falschen Stelle, deswegen war der doch leer. Upps :oops:

Was ja nicht verwundert, hast du doch den entsprechenden Hinweis bekommen
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1098417)
Da bekomm ich immer zu Laufzeit den Error "" ist kein gültiger Integerwert

Noch deutlicher wäre jetzt nur noch der Holzhammer aus dem Bildschirm :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 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