Einzelnen Beitrag anzeigen

SvenLittkowski

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

AW: Komponente: noch grün hinter den Ohren

  Alt 13. Feb 2011, 02:29
Vielen Dank erneut.

So sieht der Code zur Zeit aus:

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);
   FColor1_Original:=$00000000;
   FColor2_Added:=$00FFFFFF;
   FMixStrengthPercentage:=50;

   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;
   end;
  end;

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

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

  procedure TColorMixer.SetColor3_Result(Value: TColor);
  var
   Color1, Color2: LongInt;
   ValueR, ValueG, ValueB, Value1, Value2: Byte;
  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
   FMixStrengthPercentage:=Round(2.55*FMixStrengthPercentage);
   Color1:=ColorToRGB(FColor1_Original);
   Color2:=ColorToRGB(FColor2_Added);
   Value1:=Byte(Color1);
   Value2:=Byte(Color2);
   ValueR:=FMixStrengthPercentage*(Value1-Value2) shr 8+Value2;
   Value1:=Byte(Color1 shr 8);
   Value2:=Byte(Color2 shr 8);
   ValueG:=FMixStrengthPercentage*(Value1-Value2) shr 8+Value2;
   Value1:=Byte(Color1 shr 16);
   Value2:=Byte(Color2 shr 16);
   ValueB:=FMixStrengthPercentage*(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 Zeiten des STACK OVERFLOWs sind nun vorbei, allerdings haben die Zeiten des reibungslosen und ordnungsgemäßen Funktionierens auch noch nicht angefangen...

Ich habe mir meine Gedanken gemacht, warum ich - trotz gelesener Tutorials (siehe Links einige Postings zuvor) und guten Hinweisen zu Teilproblemen - ich nicht weiterkomme. Ich will Euch alle ja auch nicht immer mit meinen Fragen nerven. Ist halt meine allerserte Komponente. Vieleicht würde es mir weiterhelfen, den Code einer einigermaßen vergleichbaren Komponente mir mal durchzulesen. Also von einer Komponente, wo Eingaben gemacht werden, und dadurch ein Ergebnis entsteht. Kennt jemand so eine Komponente? Wenn ich mir deren Quellcode durchlese, würde ich bestimmt dies auch auf meine Komponente anwenden können, hoffe ich. Meine Befürchtung ist, daß man hier denken könnte, ich will es mir einfach machen. Und ich bin der Menschentyp, der gut von funktionierenden Vorbildern lernen kann.

Ich suche also eine Beispielskomüponente, die
- nicht zu umfangreich ist
- Eingaben vom benutzer erwartet
- ein davon abhängiges Resultat in einem der Felder liefert.

Meine Komponente gibt zur Zeit immer nur ein schwarz zurück...
Und auch das Bild für die Komponentenleiste will nicht kommen, deshalb habe ich beide Resourcen erstmal ungültig gemacht (zwei, weil weder das Bitmap noch danach das Icon angezeigt wurden und ich unsicher war). Hatte beide Resourcen (ein Icon und ein Bitmap) im Image Editor als jeweils Resource erstellt.

Geändert von SvenLittkowski (13. Feb 2011 um 02:32 Uhr)
  Mit Zitat antworten Zitat