Einzelnen Beitrag anzeigen

SvenLittkowski

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

AW: Komponente: noch grün hinter den Ohren

  Alt 11. Feb 2011, 16:51
Vielen Dank für die Links. Ich hatte mir die Links
- http://mc-computing.com/languages/delphi/Components.htm
- http://mc-computing.com/languages/delphi/Resources.html
durchgelesen und versucht, in meiner Unit umzusetzen.

Hier erstmal ein Update des gegenwärtigen Codes:

Delphi-Quellcode:
unit ColorMixer;

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;
    protected
      procedure SetColor1_Original(Value: TColor);
      procedure SetColor2_Added(Value: TColor);
      procedure SetMixStrengthPercentage(Value: Byte);
      procedure SetColor3_Result(Value: TColor);
      function Colorize: TColor;
    public
      constructor Create( AOwner: TComponent); override;
    published
      property Color1_Original: TColor read FColor1_Original write SetColor1_Original stored true default $00000000;
      property Color2_Added: TColor read FColor2_Added write SetColor2_Added stored true default $00FFFFFF;
      property MixStrengthPercentage: Byte read FMixStrengthPercentage write SetMixStrengthPercentage stored true default 50;
      property Color3_Result: TColor read FColor3_Result default $00888888;
    end;

  procedure Register;

//{$R ColorMixer.res}
{$R ColorMixer.dcr}

implementation

  constructor TColorMixer.Create(AOwner: TComponent);
  var Filename, s: String;
  begin
   inherited Create(AOwner);
   Color1_Original:=$00000000;
   Color2_Added:=$00FFFFFF;
   MixStrengthPercentage:=50;
// Color3_Result:=$00888888;

   if not (csDesigning in ComponentState) then
   begin
    if (Filename='')or(Filename='.') then
    begin
     s:=Application.ExeName;
     Filename:=ChangeFileExt(s,'.ini');
    end;
   end;
  end;

  procedure TColorMixer.SetColor1_Original(Value: TColor);
  begin
   if Value<>FColor1_Original then
   begin
    FColor1_Original:=Value;
    Colorize;
   end;
  end;

  procedure TColorMixer.SetColor2_Added(Value: TColor);
  begin
   if Value<>FColor2_Added then
   begin
    FColor2_Added:=Value;
    Colorize;
   end;
  end;

  procedure TColorMixer.SetMixStrengthPercentage(Value: Byte);
  begin
   if Value<>FMixStrengthPercentage then
   begin
    FMixStrengthPercentage:=Value;
    Colorize;
   end;
  end;

  procedure TColorMixer.SetColor3_Result(Value: TColor);
  begin
   if Value<>FColor3_Result then
   begin
    FColor3_Result:=Colorize;
   end;
  end;

  function TColorMixer.Colorize: TColor;
  var
   Color1, Color2: LongInt;
   ValueR, ValueG, ValueB, Value1, Value2: Byte;
  begin
   MixStrengthPercentage:=Round(2.55*MixStrengthPercentage);
   Color1:=ColorToRGB(Color1_Original);
   Color2:=ColorToRGB(Color2_Added);
   Value1:=Byte(Color1);
   Value2:=Byte(Color2);
   ValueR:=MixStrengthPercentage*(Value1-Value2) shr 8+Value2;
   Value1:=Byte(Color1 shr 8);
   Value2:=Byte(Color2 shr 8);
   ValueG:=MixStrengthPercentage*(Value1-Value2) shr 8+Value2;
   Value1:=Byte(Color1 shr 16);
   Value2:=Byte(Color2 shr 16);
   ValueB:=MixStrengthPercentage*(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.
Ich hatte mit dem Image Editor eine Resource hergestellt, zuerst ein Icon, als dieses trotzdem kein Komponentenbild bei der Neukompilierung ergab, dann ein BMP. Nach wie vor kein schönes Bildchen bei Neukompilierung, dafür aber ein unterhaltender STACK OVERFLOW, wenn ich die Komponente auf ein Formular bringe, und das vorzeitige Schließen von Delphi, whuuaaa haa ha ha ha! Der wahnwitzig-tolldreiste Wahn breitet sich nun langsam in mir aus...

Es scheint aber nicht an der eingebundenen Resource zu liegen. Ich hatte wahlweise die eine und dann die andere Resource aus dem Code entfernt und auch aus Delphi's Library.
  Mit Zitat antworten Zitat