Einzelnen Beitrag anzeigen

SvenLittkowski

Registriert seit: 18. Dez 2004
98 Beiträge
 
#12

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 17:48
Vielen Dank für alle bisherigen Antworten, Ihr alle habt mir wesentlich weitergeholfen. Hier der Code, wie er jetzt ist:

unit ColorMixer;

Code:
interface

  uses
    SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
    Forms, Dialogs, StdCtrls;

  type
    TColorMixer=class(TComponent)
    private
      FColor1_Original:         TColor;
      FColor2_Added:            TColor;
      FMixStrengthPercentage:   Byte;
      FColor3_Result:           TColor;
      SetColor1_Original:       TColor;
      SetColor2_Added:          TColor;
      SetFMixStrengthPercentage: Byte;
    protected
      function Colorize(Sender: TObject; ColorOriginal, ColorAdded: TColor; PercentageStrength: Byte): TColor;
    public
      constructor Create( AOwner: TComponent); override;
    published
      property Color1_Original:      TColor read   FColor1_Original      write SetColor1_Original       default clBlack;
      property Color2_Added:         TColor read   FColor2_Added         write SetColor2_Added          default clWhite;
      property MixStrengthPercentage: Byte  read   FMixStrengthPercentage write SetFMixStrengthPercentage default 50;
      property Color3_Result:        TColor read   FColor3_Result        default clGray ;
    end;

  procedure Register;

implementation

  constructor TColorMixer.Create(AOwner: TComponent);
  begin
   inherited Create(AOwner);    
  end;

  function TColorMixer.Colorize(Sender: TObject; ColorOriginal, ColorAdded: TColor; PercentageStrength: Byte): TColor;
  var
   Color1, Color2:                        LongInt;
   ValueR, ValueG, ValueB, Value1, Value2: Byte;
  begin
   PercentageStrength:=Round(2.55*PercentageStrength);
   Color1:=ColorToRGB(ColorOriginal);
   Color2:=ColorToRGB(ColorAdded);
   Value1:=Byte(Color1);
   Value2:=Byte(Color2);
   ValueR:=PercentageStrength*(Value1-Value2) shr 8+Value2;
   Value1:=Byte(Color1 shr 8);
   Value2:=Byte(Color2 shr 8);
   ValueG:=PercentageStrength*(Value1-Value2) shr 8+Value2;
   Value1:=Byte(Color1 shr 16);
   Value2:=Byte(Color2 shr 16);
   ValueB:=PercentageStrength*(Value1-Value2) shr 8+Value2;
   Result:=(ValueB shl 16)+(ValueG shl 8)+ValueR;
  end;

  procedure Register;
  begin
   RegisterComponents('Sven Littkowski`s Best',[TColorMixer]);
  end;

end.
Die Komponente läßt sich jetzt zwar kompilieren, aber es sind nach Einfügen auf einem Formular nur die zwei zu mischenden Farbfelder sichtbar sowie das Mischungsverhältnis, und auch bei versuchtem Ändern in andere Farben bleiben sie schwarz.

Was ich aber will, ist zu ereichen, daß die Farben geändert werden können, und das auch die resultierende Farbe sofort nach Setzen der zu mischenden Farben und des Farbverhältnisses im Objektinspektor angezeigt wird.
  Mit Zitat antworten Zitat