AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente: noch grün hinter den Ohren

Ein Thema von SvenLittkowski · begonnen am 10. Feb 2011 · letzter Beitrag vom 14. Feb 2011
Antwort Antwort
SvenLittkowski

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

Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 01:05
Hi. Ich habe so gut wie keine Erfahrung damit, Komponenten für Delphi zu erstellen, trotzdem will ich mir eine erste Komponente erstellen, die ich einfach immer wieder brauchen werde. War klar, daß ich einige Fehler machen würde. Und hier sind sie, die Fehler und der Code:

Code:
01.unit ColorMixer;
02.
03.interface
04.
05. uses
06.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
07.   Forms, Dialogs, StdCtrls;
08.
09. type
10.   TColorMixer=class(TObject)
11.   private
12.     FColor1_Original:     TColor;
13.     FColor2_Added:        TColor;
14.     FMixStrengthPercentage: Byte;
15.     FColor3_Result:       TColor;
16.   protected
17.     function Colorize(Sender: TObject; ColorOriginal, ColorAdded: TColor; PercentageStrength: Byte): TColor;
18.   public
19.     constructor Create( AOwner: TComponent ); override;
20.     property Color1_Original:      TColor read FColor1_Original default clBlack;
21.     property Color2_Added:         TColor read FColor2_Added default clWhite;
22.     property MixStrengthPercentage: Byte  read FMixStrengthPercentage;
23.   published
24.     property Color3_Result: TColor read   FColor3_Result
25.                                    write  SetColor3_Result
26.                                    default clGray;
27.   end;
28.
29. procedure Register;
30.
31.implementation
32.
33. constructor TColorMixer.Create(AOwner: TComponent);
34. begin
35. inherited Create(AOwner);
36. end;
37.
38. function TAlpha.Colorize(Sender: TObject; ColorOriginal, ColorAdded: TColor; PercentageStrength: Byte): TColor;
39. var
40.  Color1, Color2:                        LongInt;
41.  ValueR, ValueG, ValueB, Value1, Value2: Byte;
42. begin
43.  PercentageStrength:=Round(2.55*PercentageStrength);
44.  Color1:=ColorToRGB(ColorOriginal);
45.  Color2:=ColorToRGB(ColorAdded);
46.  Value1:=Byte(Color1);
47.  Value2:=Byte(Color2);
48.  ValueR:=PercentageStrength*(Value1-Value2) shr 8+Value2;
49.  Value1:=Byte(Color1 shr 8);
50.  Value2:=Byte(Color2 shr 8);
51.  ValueG:=PercentageStrength*(Value1-Value2) shr 8+Value2;
52.  Value1:=Byte(Color1 shr 16);
53.  Value2:=Byte(Color2 shr 16);
54.  ValueB:=PercentageStrength*(Value1-Value2) shr 8+Value2;
55.  Result:=(ValueB shl 16)+(ValueG shl 8)+ValueR;
56. end;
57.
58. procedure Register;
59. begin
60.  RegisterComponents('Sven Littkowski`s Best',[TColorMixer]);  // Eher "Sven Littkowski's Worst"...
61. end;
62.
63.end.
Zitat von Mein Delphi 7:
[Error] ColorMixer.pas(19): Cannot override a static method
[Error] ColorMixer.pas(26): Field or method identifier expected
[Error] ColorMixer.pas(35): Too many actual parameters
[Error] ColorMixer.pas(38): Function needs result type
[Error] ColorMixer.pas(43): Undeclared identifier: 'PercentageStrength'
[Error] ColorMixer.pas(44): Undeclared identifier: 'ColorOriginal'
[Error] ColorMixer.pas(45): Undeclared identifier: 'ColorAdded'
[Error] ColorMixer.pas(60): Incompatible types: 'TComponentClass' and 'Class reference'
[Error] ColorMixer.pas(17): Unsatisfied forward or external declaration: 'TColorMixer.Colorize'
[Fatal Error] dclusr.dpk(176): Could not compile used unit '..\Projects\Sven\Unit ColorMixer\ColorMixer.pas'
Der Quellcode ist sehr kurz, da die Komponente nur eine sehr grundlegende Funktion erfüllt. Trotzdem die vielen Fehler. Bitte setzt nicht voraus, daß mir Hinweise in den meisten Fällen helfen werden, da dies ein Neuland für mich ist. Ich denke da eher an Korrekturen. Na, mal sehen. Jedenfalls vielen Dank für's Lesen und Zeitnehmen, und auch für Eure guten Absichten!

Geändert von SvenLittkowski (10. Feb 2011 um 01:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#2

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 04:28
Mit diesen Hinweisen müsstest du eigentlich auch ohne Sourcecode etwas anfangen können:

[Zeile 10] Komponenten müssen entweder direkt von TComponent oder von einer Nachfahrklasse von TComponent abgeleitet werden.

[Zeile 25] Wenn man auf eine Property über eine Setter-Methode zugreifen will, dann muss man diese natürlich auch deklarieren und implementieren.

[Zeile 38] Der Name deiner Klasse ist nicht TAlpha, sondern TColorMixer.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
SvenLittkowski

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

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 06:11
Ja, guter Hinweis. Einerseits bin ich absolut unerfahren mit dem Herstellen von Komponenten, abdererseits (TAlpha) habe ich Elemente aus einem Programm kopiert und war sehr schludrig mit dem korrekten Implementieren.

Einige Fragen habe ich aber noch:

1.
Ich will eigentlich erreichen, daß im Object Inspector alle drei Farbfelder und daß prozentuale Mischverhältnis sichtbar sind, davon bis auf Color3 auch alle vom Benutzer manipulierbar. Was muß ich dazu tun? Wie gesagt, ich fange bei 0 an bei den Komponenten...

2.
Außerdem würde ich gerne ein Farbergebnis in RealTime haben. Ich ahne, daß ich die Klasse TTimer einfügen muß, liege ich darin richtig? Aber wie bringe ich den Timer dazu, ständig zu laufen? Und wie baue ich überhaupt dieses Dingelchen ein?

3.
Und ich würde gerne das Default-Icon in der Komponentenleiste von Delphi durch ein eigenes Icon ersetzen, auch hier totales Neuland.

Geändert von SvenLittkowski (10. Feb 2011 um 06:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 07:45
Farbe 1,2 und Percentage mit Getter und Setter versehen, Farbe 3 nur mit Getter.
Timer benötigst Du keinen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 07:49
Und in den Settern baust du dann jeweils noch die Aktualisierung von Farbe 3 ein, das sollte glaub ich das sein, was du mit Realtime meinst?
Ralph
  Mit Zitat antworten Zitat
SvenLittkowski

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

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 07:58
"Color3" als Getter = "FColor3"?
  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 02: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