Witam

Mam programik który po naciśnięciu przycisku tworzy panel z komponentami (Edit i ComboBox).
Takich paneli moźe być docelowo stworzonych kilka.

procedure TForm1.Button1Click(Sender: TObject);
begin
nr:= nr+1 ;
Panel := TPanel.Create (Form1);
Panel.Parent := form1;
With Panel do begin
Name := 'P' + IntToStr(nr);
Left:=16;
Top:=120;
Width:=100;
Height:=300;
Caption:=Name;
Text:='TEXT_'+IntToStr(nr);
Color:=clMedgray;
OnMouseDown := MouseDown
end;

Edit := TEdit.Create (Panel);
Edit.Parent := Panel;
With Edit do begin
Name := 'E' + IntToStr(nr);
Left:=8;
Top:=8;
Width:=60;
Height:=21;
Text:='1000';
end;

ComboBox := TComboBox.Create (Panel);
ComboBox.Parent := Panel;
With ComboBox do begin
Name := 'C' + IntToStr(nr);
Left:=8;
Top:=32;
Width:=60;
Height:=21;
Text:=IntToStr(nr);
For x:=1 to 5 do
Items.Add(IntToStr(x));
OnChange := ComboBoxChange1
end;

Dzięki procedurce
SendMessage(TWinControl(Sender).Handle, WM_SYSCOMMAND, $F012, 0)
mogę je dowolnie przesuwać po formie.
Za pomocą komponentów na panaleach zmieniam rozmiar każedgo z nich z osobna.
Zeby nie być gołosłownym poniżej kod:

procedure TForm1.ComboBoxChange1(Sender: TObject);
var
panel_wybrany : TPanel ;
edit_wybrany: TEdit ;
s1: string;
begin
s1:=TComboBox(Sender).Name;
Panel_wybrany:=TPanel(self.FindComponent('P'+Copy(s1,2,1)));
Edit_wybrany:=TEdit(Panel_wybrany.FindComponent('E'+Copy(s1,2,1)));
Panel_wybrany.Height:=(StrToInt(Edit_wybrany.Text) div 5) div (TComboBox(sender).ItemIndex+1);
Panel_wybrany.Width:=(TComboBox(sender).ItemIndex+1)100;
Panel_wybrany.Caption:= IntToStr((Panel_wybrany.Height
100) div 167);
end;

Chcę dodać jeszcze jeden ComboBox w którym wybierałbym pewną wartość która wpływałaby na wielkość panela.
Jednak wtedy procedura powyżej nie działa bo zdarzenie ComboBoxChange ma innego Sendera...
Czy muszę pisać (dublować) procedurę jak powyżej dla drugiebo CBoxa czy jest inna metoda.

I druga sprawa. Na panelu każdym panelu chcę umieścić przycik który by "zamykał" wybrany panel.

Wymyśliłem coś takiego i mam pytanie czy to zadziała?

Tworzenie buttona

Button := TButton.Create (Panel);
Button.Parent := Panel;
With Button do begin
Name := 'B' + IntToStr(nr);
Left:=8;
Top:=32;
Width:=60;
Height:=21;

I jego obsługa:

procedure TForm1.ButtonClick(Sender: TObject);
var
panel_wybrany : Tpanel;
begin
Panel_wybrany:=TPanel(self.FindComponent('B'+Copy(TComboBox(Sender).Name,2,1)))
Panel.Free;
Panel := nil;
end;