AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

HTML-Farbwert in Color umwandeln?

Ein Thema von Opa Knack · begonnen am 30. Jan 2005 · letzter Beitrag vom 1. Feb 2005
Antwort Antwort
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#1

HTML-Farbwert in Color umwandeln?

  Alt 30. Jan 2005, 01:29
Hallo,

zu diesem Thema gibt es zwar schon einige Antworten, aber leider nicht die, die ich suche:

Ich möchte eine HTML-Farbeingabe (z. B. #000080), die in einem Editfeld gemacht wird, in einen TColor-Farbwert umrechnen und die RGB-Werte ermitteln. Dabei soll überprüft werden, ob der eingegebene Wert überhaupt umsetzbar ist (so dass z. B. #ZZZZZZ nicht verarbeitet wird). Nebenbei kann die Eingabe in Form von #000080 oder 000080 vorliegen und sollte in beiden Fällen akzeptiert werden, ebenso sollte Groß- und Kleinschreibung akzeptiert werden.

Egal, was ich bisher versucht habe, irgendwie bekomme ich das einfach nicht hin.

Hat jemand einen Tipp für mich, ob es dafür einen Befehl oder eine Funktion gibt?

Danke
Opa
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: HTML-Farbwert in Color umwandeln?

  Alt 30. Jan 2005, 01:39
Delphi-Quellcode:
function HTMLColorToTColor(AHTMLColor: String): TColor;
begin
  if pos('#', AHTMLColor) <> 1 then
    AHtmlColor := '#' + AHTMLColor;
  AHTMLColor := StringReplace(AHTMLColor, '#', '$', [rfReplaceAll]);
  if length(AHTMLColor) = 7 then
  begin
    try
      result := RGB(strtoint(copy(AHTMLColor, 1, 3)),
                    strtoint('$' + copy(AHTMLColor, 4, 2)),
                    strtoint('$' + copy(AHTMLColor, 6, 2)));
    except
      result := clBlack;
    end;
  end else result := clBlack;
end;
Eine andere Variante wäre einfach die ersten beiden HexZeischen mit den letzten beiden Hex-Zeischen zu tauschen und dann einfach mit
StrToInt(StringReplace(AHTMLColor, '#', '$', [rfReplaceAll])); die farbe nehmen. Wenn dabei ein Fehler auftritt stimmt das format auch nicht
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#3

"Filter" für Eingabefeld?

  Alt 30. Jan 2005, 22:55
Hallo,

Danke für den Tipp. Nun nur noch eine Frage: Wenn nun statt eines gültigen HEX-Strings z. B. ZZZZZZ eingegeben wird, meldet das Programm einen Fehler und bricht ab. Kann man das Eingabefeld "filtern", so dass nur die gültigen Zeichen (0-9, A-F) akzeptiert werden?

Danke
Opa
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: HTML-Farbwert in Color umwandeln?

  Alt 31. Jan 2005, 07:39
Wenn du als Eingabefeld eine TEdit-Komponente verwendest, kann man über die OnKeyPress- und OnKeyDown-Ereignisse die nicht zulässigen Werte abfangen.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#5

Re: HTML-Farbwert in Color umwandeln?

  Alt 31. Jan 2005, 12:31
Hallo,

Super, das klappt alles hervorragend.

Nun nur noch ein kleineres Problem: Nun wird zwar eine Hex-Eingabe im Editfeld umgewandelt, doch nach jeder Umwandlung wird auf Eingabe eines weiteren Zeichens erst einmal der clBlack-Farbwert zurückgegeben. Wenn ich also z. B. #000080 eingebe, wird mir Blau zurückgegeben, wenn ich dann die Eingabe markiere und einen anderen Wert eingeben will, wird automatisch auf Schwarz gesetzt und ich kann die Eingabe nochmal vornehmen. Die Umwandlung funktioniert also in diesem Sinne nur jedes 2te Mal.

Ich habe nun schon auf alle mir erdenklichen Arten versucht, die Funktion ein wenig zu manipulieren, aber den Fehler kriege ich einfach nicht raus (Source ist unverändert geblieben) .

Weiß jemand, woran das liegen könnte?

Danke
Opa
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: HTML-Farbwert in Color umwandeln?

  Alt 31. Jan 2005, 13:13
Das liegt wahrschienlich an der Funktion von SirThornberry. Wie man im obigen Quelltext erkennen kann, wird von dieser Funktion clBlack (d.h. der Wert für die Farbe schwarz) zurückgegeben, falls ein Fehler auftritt oder das Format nicht korrekt ist. Da aber nach Eingabe eines weiteren Zeichens Letzteres kurzfristig der Fall ist (d.h. solange die Eingabe unvollständig ist), wird also schwarz zurückgegeben.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#7

Re: HTML-Farbwert in Color umwandeln?

  Alt 31. Jan 2005, 14:51
Hallo,

genau daran liegt es (ich habe mal den Wert auf clRed geändert, woraufhin immer alles Rot wurde). Die Frage ist nur, wie man diesen Fehler umgehen kann...? Ich nage hier langsam die Tischkante rund, trotzdem bin ich noch nicht dahinter gekommen, was ich nun tun kann

Danke
Opa
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: HTML-Farbwert in Color umwandeln?

  Alt 31. Jan 2005, 15:10
Du müsstest, bevor du den Text vom Edit-Feld an die Funktion übergibst, überprüfen, ob der Text auch 6 Zeichen bzw. 7 Zeichen (mit #) lang ist und erst dann an die Funktion übergeben. Somit wird verhindert, dass zwischendurch ein "unfertiger" Wert (z.B. '#803' statt '#8030FF') an die Funktion übergeben wird und alles schwarz (oder rot) ist.

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Opa Knack

Registriert seit: 28. Dez 2004
Ort: Köln
166 Beiträge
 
#9

Re: HTML-Farbwert in Color umwandeln?

  Alt 1. Feb 2005, 00:27
Hallo,

ich habe das Problem inzwischen dadurch gelöst, dass ich den "Fehlerwert" einfach auf die Farbe des TShapes gesetzt habe, und dass ich das Edit mit einem OnChange-Event ergänzt habe, welcher nur die Tasten 0-9, a-f, A-F und # zuläßt.

Nun habe ich aber noch ein Problem, bei dem ich nicht weiterkomme:

Wenn nun in dem Editfeld #000000 eingegeben wird, wird dies wie jeder andere gültige Hexwert akzeptiert. Wenn aber 00#0000 eingegeben wird, oder ##00000, oder jede andere sinnlose Kombination der zugelassenen Zeichen, bekomme ich natürlich eine Fehlermeldung zu sehen.

Ich denke mal, das Sinnvollste wäre, wenn ich entweder vor der Rückgabe des Farbwertes eben diesen auf Korrektheit prüfe und dem Ergebnis entsprechend entweder die Rückgabe fortführe oder die Funktion abbreche, oder wenn eine Maske auf das Editfeld gelegt werden könnte, welche die Form #xxxxxx vorgibt. Bei beiden Lösungsansätzen komme ich aber leider nicht weiter...

Sind diese Ideen richtig (und wenn ja: Wie kann ich das umsetzen), oder hat jemand einen besseren Einfall?

Danke
Opa
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: HTML-Farbwert in Color umwandeln?

  Alt 1. Feb 2005, 18:59
Zitat von Opa Knack:
Hallo,

ich habe das Problem inzwischen dadurch gelöst, dass ich den "Fehlerwert" einfach auf die Farbe des TShapes gesetzt habe, und dass ich das Edit mit einem OnChange-Event ergänzt habe, welcher nur die Tasten 0-9, a-f, A-F und # zuläßt.
Genau so habe ich das vorhin auch gemeint.
Um jetzt noch die Korrektheit der Eingabe zu prüfen, muss man prüfen, ob das #-Zeichen mehrmals oder nur einmal, aber dafür nicht am Anfang vorkommt. das könnte in etwa so aussehen:
Delphi-Quellcode:
if length(Edit1.Text)>0 then begin
 if ((pos('#', Edit1.Text)>1) or (pos('#', copy(Edit1.Text, 2, length(Edit1.text)))>=1)) then
  ShowMessage('Eingabe ist ungültig!')
 else begin
  ///Eingabe OK
   machwas;
 end;
end
else Showmessage('String ist leer');
(Ungetestet!)

MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz