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
Seite 1 von 4  1 23     Letzte »    
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
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 08:37
Delphi-Quellcode:
     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;
Die Property sind nur im Objektinspektor sichtbar, wenn diese auch published sind.
Der Setter fehlt natürlich auch.
  Mit Zitat antworten Zitat
SvenLittkowski

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

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 14:49
Hier der inzwischen veränderte Code.

Code:
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;
      SetColor3_Result:      TColor;
    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.
Zitat von MyDelphi 7:
[Error] ColorMixer.pas(22): Field or method identifier expected
[Error] ColorMixer.pas(23): Field or method identifier expected
[Error] ColorMixer.pas(24): Field or method identifier expected
[Hint] ColorMixer.pas(16): Private symbol 'SetColor3_Result' declared but never used
[Fatal Error] dclusr.dpk(176): Could not compile used unit '..\Projects\Sven\Unit ColorMixer\ColorMixer.pas'

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

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 15:01
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;



Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Komponente: noch grün hinter den Ohren

  Alt 10. Feb 2011, 15:04
22 bis 24: Wenn du schon eine Settermethode angeben willst, dann solltest du diese auch implementieren.
"Field or method identifier expected" = "Feld/Variable oder Methode/Prozedur erwartet" ... bei dir wurde aber was Unbekanntes/Nichtdeklariertes (nicht) gefunden

16: Dieses Feld wurde deklariert, aber du hast es nirgendwo verwendet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Feb 2011 um 15:09 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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:00 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