AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Warum werden meine Farbwerte nich übernommen?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum werden meine Farbwerte nich übernommen?

Ein Thema von schöni · begonnen am 30. Sep 2005 · letzter Beitrag vom 30. Sep 2005
Antwort Antwort
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#1

Warum werden meine Farbwerte nich übernommen?

  Alt 30. Sep 2005, 18:26
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:
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.
Nach Programmstart werden die Farben jedoch nicht korrekt übernommen und angezeigt. Kann mir jemand helfen. Wo liegt mein Fehler?

Verzweifelte Grüße von

schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#2

Re: Warum werden meine Farbwerte nich übernommen?

  Alt 30. Sep 2005, 18:40
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)

...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#3

Re: Warum werden meine Farbwerte nich übernommen?

  Alt 30. Sep 2005, 19:46
Hallo himitsu!

Danke erst mal für die schnelle Antwort. Echt Klasse!

Den Trackbars sind die EventHandler zugewiesen, Daran liegt es nicht.

Zitat:
Brush.Color ... woltest du nicht ColorMonitor.Brush.Color verwenden?
Ist korrigiert. Danke! Vier Augen sehen eben doch mehr als nur zwei!

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:
ich kann zwar den sinn nicht so ganz erkennen, warum man dafür überhaupt 'ne Klasse braucht...
Danke für die Anregung. Werd das prüfen, wenn das Prog insgesamt fertig ist. Habe die Klasse gewählt, um die Einzelteile für das Programm als übersichtliche Bausteine zu haben.

Also, nochmal Danke für die Hilfe.


schöni
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  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 19:32 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