![]() |
TColorscheme als String
Hi Leuet,
in was muss ein Strin konvertiert werden um als ColorScheme zu übergeben ? Grüße |
Re: TColorscheme als String
Hi,
eine kleine Bitte vorab, etwas mehr Zeit beim Schreiben nehmen und dafür bessere Rechtschreibung und mehr Information verwenden. Das spart zum Schluß eh Zeit, da das nachfragen wegfällt. In was ein String konvertiert werden muss um als TColorScheme übergeben werden zu können? Na ja, in ein TColorScheme natürlich. Da mir TColorScheme nichts sagt und auch meine Hilfe nichts dazu findet und ich einfach mal davon ausgehe, dass Deine eigentliche Frage sich auf das Wie bezieht, fehlt hier ganz klar eine Menge Informationen. Was genau möchtest Du denn machen? An wen möchtest Du einen String als TColorScheme übergeben und in welcher Unit (welcher Komponente) ist TColorScheme zu finden? Gruß Der Unwissende |
Re: TColorscheme als String
Wenn die ColorSchemes der XiButtons gemeint sind. die sind so definiert:
Delphi-Quellcode:
Da könnte man nur über die Ordnungszahl rankommen, mit String wird das nichts.
TColorScheme = (csNeoDesert, csNeoSky, csNeoGrass, csNeoSilver, csNeoRose, csNeoSun,
csDesert, csGrass, csSky, csSun, csRose, csSilver, csCustom); |
Re: TColorscheme als String
Zitat:
|
Re: TColorscheme als String
naja, einfach mal in den Units (XIButtons.pas) mal nachgrasen, wie der gesetzt wird, das kann schon hilfreich sein ;)
|
Re: TColorscheme als String
Hallo,
ja es handelt sich um XIButtons. Wie meinst du das mit Ordungszahlen? |
Re: TColorscheme als String
Die einzelnen Schemes haben doch eine Position in der Deklaration.
Delphi-Quellcode:
ergibt z.B. 0 (null), das nächste wäre 1 usw.
Ord(csNeoDesert)
Nun müsste man über ColorSchemes[0] ja csNeoDesert zuweisen können oder so in der Art. Das hieße, den String in die entsprechende Ordnungszahl umsetzen. Wäre jedenfalls meine Idee dazu. |
Re: TColorscheme als String
Delphi-Quellcode:
Nun brauchst du nur nachzusehen, an welcher Position dein String steht und du hast die "Nummer" des ColorSchemes ;)
const
ColorSchemeStrings: Array[0..12] of String = ('csNeoDesert', 'csNeoSky', 'csNeoGrass', 'csNeoSilver', 'csNeoRose', 'csNeoSun', 'csDesert', 'csGrass', 'csSky', 'csSun', 'csRose', 'csSilver', 'csCustom'); |
Re: TColorscheme als String
Vielen Dank, werd ich probieren :-)
|
Re: TColorscheme als String
Ich hatte etwas Zeit, hier ne Beispiel-Unit:
Delphi-Quellcode:
Es funktioniert :lol:
unit testUnit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, XiButton; type TForm1 = class(TForm) XiButton1: TXiButton; Edit1: TEdit; procedure XiButton1Click(Sender: TObject); private function GetColorScheme(s: String): TColorScheme; public { Public-Deklarationen } end; var Form1: TForm1; const ColorSchemeStrings: Array[0..12] of String = ('csNeoDesert', 'csNeoSky', 'csNeoGrass', 'csNeoSilver', 'csNeoRose', 'csNeoSun', 'csDesert', 'csGrass', 'csSky', 'csSun', 'csRose', 'csSilver', 'csCustom'); implementation {$R *.dfm} function TForm1.GetColorScheme(s: String): TColorScheme; var i, x: Integer; begin x:=-1; for i:=0 to 12 do if s = ColorSchemeStrings[i] then x:=i; if x > -1 then case x of 0: Result:=csNeoDesert; 1: Result:=csNeoSky; 2: Result:=csNeoGrass; 3: Result:=csNeoSilver; 4: Result:=csNeoRose; 5: Result:=csNeoSun; 6: Result:=csDesert; 7: Result:=csGrass; 8: Result:=csSky; 9: Result:=csSun; 10: Result:=csRose; 11: Result:=csSilver; 12: Result:=csCustom; end; end; procedure TForm1.XiButton1Click(Sender: TObject); begin XiButton1.ColorScheme:=GetColorScheme(Edit1.Text); end; end. |
Re: TColorscheme als String
Normalerweise müsste auch sowas klappen:
Integer(csNeoDesert) |
Re: TColorscheme als String
Mit RTTI geht es deutlich einfacher. Nur die Unit TypInfo (ja, ohne e) einbinden und daraus die Funktionen TypeInfo, GetEnumName und GetEnumValue verwenden. Das sollte eigentlich recht selbsterklärend sein.
|
Re: TColorscheme als String
Wenn du mit den Enum-Namen (in Englisch mit cs... vornedran) klarkommst, würde ich vorschlagen, du nimmst Apollonius' Vorschlag. Anderenfalls musst du selber was basteln. Ich hab mir mal die Freiheit genommen, Progmans Lösung etwas zu vereinfachen:
Delphi-Quellcode:
HTH,
const
ColorSchemeStrings: array[TColorScheme] of string = ('Neo Desert', 'Neo Sky', 'Neo Grass', 'Neo Silver', 'Neo Rose', 'Neo Sun', 'Desert', 'Grass', 'Sky', 'Sun', 'Rose', 'Silver', 'Custom'); function TForm1.GetColorScheme(const s: string): TColorScheme; var cs: TColorScheme; begin for cs := Low(TColorScheme) to High(TColorScheme) do if s = ColorSchemeStrings[cs] then begin Result := cs; Exit; end; raise EConvertError.CreateFmt('%s ist kein TColorScheme.', [s]); end; Uli. |
Re: TColorscheme als String
Und wenn vorhanden, kann man das ganze mit
![]() ![]()
Delphi-Quellcode:
function TForm1.GetColorScheme(const s: string): TColorScheme;
var cs: TColorScheme; lInt: integer; begin lInt := AnsiIndexText(s, ColorSchemeStrings); if lInt > -1 then result := TColorScheme(lInt) else raise EConvertError.CreateFmt('%s ist kein TColorScheme.', [s]); end; |
Re: TColorscheme als String
Es funktioniert tadellos
Danke Leute! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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