![]() |
Warum werden meine Farbwerte nich übernommen?
Hallo!
Da will ich endlich mal ein glitze kleines Progrämmchen für die Allgemeinheit zugänglich machen und da tritt ein eklatenter Fehler auf. Das Programm soll Farbwerte übernehmen, die mit Trackbars eingestellt werden. Die sich ergebende Farbe soll in einer TShape Komponente angezeigt werden. Im fertigen Programm will ich auf diese Weise Farbpaletten erzeugen, die ich dann in einer Datei speichern will, um sie für die Farbgestaltung zukünftiger Anwendungen einzusetzen. Hier ist der Quelltext:
Delphi-Quellcode:
Nach Programmstart werden die Farben jedoch nicht korrekt übernommen und angezeigt. Kann mir jemand helfen. Wo liegt mein Fehler?
unit main;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ToolWin, StdCtrls, ExtCtrls; type TRGBstructure = record case integer of 0: (r,g,b: byte); 1: (red,green,blue,alpha: byte); //Die RGB Werte 2: (color: Longint); //Die Mischfarbe end; type TRGBClass = class //Eine Klasse zur Bearbeitung der Farbwerte private rgbStruc: TRGBStructure; function getColor: Longint; procedure setColor(value: Longint); function getred: byte; procedure setred(value: byte); function getgreen: byte; procedure setgreen(value: byte); function getblue: byte; procedure setblue(value: byte); public constructor create(filename: string); destructor destroy; override; procedure LoadFromFile(filename: string); procedure SaveToFile(filename: string); property Color: Longint read getColor write setColor; property red: byte read getred write setred; property green: byte read getgreen write setgreen; property blue: byte read getblue write setblue; end; type TForm1 = class(TForm) RedValue: TTrackBar; GreenVal: TTrackBar; BlueVal: TTrackBar; ColorMonitor: TShape; stxtRed: TStaticText; stGreen: TStaticText; stBlue: TStaticText; Button1: TButton; Button2: TButton; Button3: TButton; strMin: TStaticText; strMax: TStaticText; stgMin: TStaticText; stgMax: TStaticText; stbMin: TStaticText; stbMax: TStaticText; CoolBar1: TCoolBar; ToolBar1: TToolBar; procedure RedValueChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure GreenValChange(Sender: TObject); procedure BlueValChange(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Palette: TRGBClass; implementation {$R *.DFM} function TRGBClass.getColor: Longint; begin Result := rgbStruc.Color; end; procedure TRGBClass.setColor(value: Longint); begin if rgbStruc.Color <> value then value := rgbStruc.Color; end; function TRGBClass.getred: byte; begin Result := rgbStruc.red end; procedure TRGBClass.setred(value: byte); begin if value <> rgbStruc.red then rgbStruc.red := value end; function TRGBClass.getgreen: byte; begin Result := rgbStruc.green end; procedure TRGBClass.setgreen(value: byte); begin if value <> rgbStruc.green then rgbStruc.green := value end; function TRGBClass.getblue: byte; begin Result := rgbStruc.blue; end; procedure TRGBClass.setblue(value: byte); begin if value <> rgbStruc.blue then rgbStruc.blue := value end; constructor TRGBClass.create(filename: string); begin inherited Create; end; destructor TRGBClass.destroy; begin inherited Destroy; end; procedure TRGBClass.LoadFromFile(filename: string); begin //noch nicht implementiert end; procedure TRGBClass.SaveToFile(filename: string); begin //noch nicht implementiert end; procedure TForm1.RedValueChange(Sender: TObject); begin Palette.red := RedValue.Position; //Farbwert einstellen Brush.Color := Palette.Color; //Gesamtfarbe übergeben end; procedure TForm1.FormCreate(Sender: TObject); begin Palette := TRGBClass.Create(''); ColorMonitor.Brush.Style := bsSolid; ColorMonitor.Brush.Color := Palette.Color; end; procedure TForm1.GreenValChange(Sender: TObject); begin Palette.green := GreenVal.Position; ColorMonitor.Brush.Color := Palette.Color; end; procedure TForm1.BlueValChange(Sender: TObject); begin Palette.blue := BlueVal.Position; ColorMonitor.Brush.Color := Palette.Color; end; end. Verzweifelte Grüße von schöni |
Re: Warum werden meine Farbwerte nich übernommen?
ich kann zwar den sinn nicht so ganz erkennen, warum man dafür überhaupt 'ne Klasse braucht (die verbraucht ja mehr resourcen, als nötig -.-)
überprüfe, ob den Trackbars die Ereignisroutinen zuzuwiesen sind? Brush.Color ... woltest du nicht ColorMonitor.Brush.Color verwenden? (ok, durch diesen Fehler wird zwar nicht das Shape gefährbt ... sonder der Form-Hintergrund) und dann noch zu weiteren Problemen: * Palette wird nicht wieder freigegen * Palette wird nicht "ordentlich" initialisiert > rgbStruc auf 'nen definierten wert setzen (z.B. clBlack) wobei da auch der fehler liegen könnte (da alpha, was ja bei der übergabe) ... |
Re: Warum werden meine Farbwerte nich übernommen?
Hallo himitsu!
Danke erst mal für die schnelle Antwort. Echt Klasse! Den Trackbars sind die EventHandler zugewiesen, Daran liegt es nicht. Zitat:
Die Palette ist jetzt auch initialisiert und wird mit OnClose meiner Form jetzt auch ordentlich freigegeben. Danke auch für den Tipp! Trotzdem trat der Fehler noch auf. Da hab ich noch mal den Objektinspektor genau angeguckt. Und da fiel mir auf, daß der Wert für TrackBar.Max auf dem Wert 10 stand (standardmäßig durch Delphi) Ich brauche aber den Wert 255, den maximalen Farbwert halt. Damit ist die Ursache gefunden. Der Maximalwert meiner TrackBars war zu klein eingestellt! Zitat:
Also, nochmal Danke für die Hilfe. schöni |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 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