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