Tworzenie komponenta troche inaczej

0

Mam problem z tworzeniem nowego komponentu. Problem przedstawia sie nastepująco.
Mam główny formularz na którym chce umieścić komponent typu TImage poprzez nacisnięcie przycisku. Komponent ten ma za zadanie narysowanie zadanej gamy kolorów. Jednak problem polega na tym iż tworzenie tego komponentu odbywa się w innym dołanczonym module .pas (w moim przypadku algorm.pas). Wszystko wyglada na dobrze jednak mam problem z dołaczeniem tego komponentu do głównej formy. Zauważyłem ze problem ten leży w przypisaniu rodzica (parent). I nie wiem jak sie z tym faktem uporać ?????

Z góry dzieki za jakies wskazówki.

Nizej dwa listing moim modułów:
Unit1.pas

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,algorm, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ColorMap(1,Form1);
end;

end.

Algorm.pas

unit Algorm;

interface

uses SysUtils, Graphics,Types, Windows, ExtCtrls, Classes ,Controls;//, WinControl;

var
  colors : array[0..255] of TColor;
  ImageMap: TImage;
  procedure ColorMap(index: byte; AOwner:TComponent);

implementation

procedure ColorMap(index: byte; AOwner:TComponent);
var
i:integer;
NewRect: TRect;
begin
  ImageMap :=TImage.Create(Aowner);
      with ImageMap do
            begin
              Top:=0;
              Left:=0;
              Height:=255;
              Width:=100;
//              Parent:=Self;
            end;

case index of
0: begin
     for i := 0 to 128 do  begin colors[i] := RGB (0, i*2,255-i*2 ); end;
     for i := 128 to 254 do begin colors[i] := RGB (i*2, 255-i*2, 0); end;
     colors[255]:=RGB(255,0,0);
   end;
1: begin
     for i := 0 to 128 do  begin colors[i] := RGB (i*2, i*2,255-i*2 ); end;
     colors[128]:=RGB(255,255,0);
     for i := 129 to 255 do begin colors[i] := RGB (255, 255-i*2, 0); end;
     colors[255]:=RGB(255,0,0);
   end;
2: begin
     for i := 0 to 128 do  begin colors[i] := RGB (i*2, i*2,255-i*2 ); end;
     colors[128]:=RGB(255,255,0);
     for i := 129 to 255 do begin colors[i] := RGB (255, 255-i*2, 0); end;
     colors[255]:=RGB(255,0,0);
   end;
end;

for i:=0 to 255 do
  begin
    ImageMap.Canvas.Brush.Color := colors[i];
    NewRect := Rect(0, ImageMap.Height-i, ImageMap.Width, ImageMap.Height-i+1);
    ImageMap.Canvas.FillRect(NewRect);
  end;

end;

end.

Jak sie poszuka to sie znajdzie.

Miałem problem z tym przypisaniem rodzica jednak znalazłem rozwiazanie.
Wystarczyło dołączyć jeszcze jedna zmienna:

procedure ColorMap(index: byte; AOwner:TComponent; AParent: TWinControl);

i wszystko działa.
Teraz wywołanie procedury jest proste:

ColorMap(1,Self, Form1);

Tylko dlaczego w takiej postaci nie działa:

ColorMap(1,Form1.Owner, Form1.Parent);
0
ColorMap(1,Form1.Owner, Form1.Parent);

nie dziala bo Form1 nie ma parenta ani Ownera (NIL)
gdybys napisal:

ColorMap(1,Form1, Form1);

to by zadzialalo (nie sprawdzalem:-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1