Помощь - Поиск - Пользователи - Календарь
Полная версия: снова динамические компоненты
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
Shadow
:D
=====
Здоровеньки
=-=-=-=-=-=-=
Вот создать ясно как, а
как их теперь их разрушить
ведь как они точно зваться Я не знаю
-=-=-=-=-=-=-=
Vit
e:TEdit;

e:=TEdit.create(nil);
e.parent:=Form1;
.... работаем с компонентом

e.free
Shadow
:-/
-=-=-=
Промблемка заключается в том
что компонент не один а много они создаются в процессе
экплуатации программы
какие имена то будут
допустим первоначально имя         MyPanel
а этих панелек штук пять генерироваться будет
в разных местах
-=-=-=-=
хотелось бы выбирать из этих пяти какой ни-будь на вкус
-=-=-=-=-
Но всеравно спасибо
-=-=-=-=-
Shadow
так создаю компонент
точнее так они все содаютсч сколько понадобится МУФТ
на кабеле


MyPan := TPanel.Create(Image1);   //  MyForm теперь "обладает" MyButton
with MyPan do
BEGIN
Parent :=ScrollBox1;
MyPan.Name:=('MyPan')+Form7.Query1.FieldByName('Number').asString;
 height := 10;
  width := 10;
   BevelInner:=bvLowered;
    caption :=Form7.Query1.FieldByName('Number').asString;
     MyPan.Cursor:=crHandPoint;
      MyPan.Color:=clWhite;
       MyPan.PopupMenu:=PopupMenu1;
        MyPan.OnMouseMove:=MyPanMouseMov;
         Form7.Image1.Left:=0;
        Form7.Image1.Top:=0;
       left:=Form7.Query1.FieldByName('Mous_X').asInteger;
      top:=Form7.Query1.FieldByName('Mous_Y').asInteger;
END;
Shadow
этими двумя событиями пытаемся что нить
сними сделать

Причем компонент удалаятся
но только последне созданый и один разз

ПОЧЕМУ ???

Procedure TForm7.MyPanMouseMov(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      begin
MyPan.Color:=clRed;
 Label1.Caption:=MyPan.Name;
      end;
procedure TForm7.Del1Click(Sender: TObject);
begin
    MyPan.Destroy;
    //MyPan.SetFocus

end;
trminator
Может, попробовать завести массивчик этих панелей? (var pans: array[1..maxN] of TPanel. Потом что-то вроде pans[i]:=TPanel.Create(...)<...>; pans[i].free

По идее, должно работать
Shadow
Да создал массив
типа
MyPan: array[1..99]of Tpanel;

Так создаю

procedure TForm7.FormActivate(Sender: TObject);
Var
  c:String;
  i:Integer;

Label
  MuftsNext;

begin
  With Form7 do begin
    ScrollBox1.VertScrollBar.Position:=0;
    ScrollBox1.HorzScrollBar.Position:=0;
    ilLine.Caption:=Form2.NamesLine;
    ilFider.Caption:=Form2.NamesFider;
    ilAct_BasDat.Caption:=Form2.NamesDatBas;
  end;

  with Form7.Query1 do begin
    Close;        // закрыть файл-результат выполнения предыдущего запроса
    SQL.Clear; // удалить текст предыдущего запроса
                     // записываем новый запрос в свойство SQL
    SQL.Add('SELECT Number, Fiders, Lines, LonFroTp, 
      LonGoTp, Im_X, Im_Y, Mous_X, Mous_Y');
    SQL.Add('FROM "MuftZaos.db"');
    SQL.Add('WHERE');
    Sql.Add('(Lines="'+Form2.NamesLine+'")');    //выбор по двум
    Sql.Add('and');                             //значения
    Sql.Add('(Fiders="'+Form2.NamesFider+'")');//сразу по SQl запросу
    SQL.Add('ORDER BY Number, Fiders, Lines, LonFroTp,
      LonGoTp, Im_X, Im_Y, Mous_X, Mous_Y');
    Open;      // активизируем выполнение запроса
  end;
  Form7.Query1.First;
  c:=Form7.Query1.FieldByName('Number').asString;

MuftsNext:
  //  if Query1.Eof=true then begin
  //       exit;
  //     end
  //   else begin
  For i:=1 to Form7.Query1.RecordCount do begin
    MyPan[i] := TPanel.Create(Image1);
    MyPan[i].Name:='Pan' + c;
    //Parent :=ScrollBox1;
    MyPan[i].height := 10;
    MyPan[i].width := 10;
    MyPan[i].BevelInner:=bvLowered;
    MyPan[i].caption :=Form7.Query1.FieldByName('Number').asString;
    MyPan[i].Cursor:=crHandPoint;
    MyPan[i].Color:=clWhite;
    MyPan[i].PopupMenu:=PopupMenu1;
    MyPan[i].left:=Form7.Query1.FieldByName('Mous_X').asInteger;
    MyPan[i].top:=Form7.Query1.FieldByName('Mous_Y').asInteger;
    MyPan[i].Parent :=ScrollBox1;
    MyPan[i].OnMouseMove:=MyPanMouseMov;
    Form7.Image1.Left:=0;
    Form7.Image1.Top:=0;
    Form7.Query1.Next;
    //END;
    c:=Form7.Query1.FieldByName('Number').asString;
  end;

// Form7.Query1.Next;
// c:=Form7.Query1.FieldByName('Number').asString;
// Goto MuftsNext;
end;
Shadow
А так обрабатываю события
ВСЕ ЗАРАБОТАЛО

-=-=-=-=-=-=--=

Procedure TForm7.MyPanMouseMov(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  Label1.Caption:=((Sender as TPanel).Name);
  StatusBar1.Panels[4].Text:=((Sender as TPanel).Caption);

{
Вот тут самое интересное если бы не наткнулся на
эту строку то долго бы еще парился как определить
из какого динамичексго компонента пришло событие
Sender --- отправитель
}
(Sender as TPanel).Color:=clRed;
end;

{
Выборка динамического компонента
из массива и его изничтожение как
компонента, а тк же из базы данных
}
procedure TForm7.Del1Click(Sender: TObject);
Var
  Mufts:Integer;
  L,F:String;
begin
  Mufts:=StrToInt(Form7.StatusBar1.Panels[4].Text);
  MyPan[Mufts].Destroy;
  Form7.Query1.Locate('Number',Mufts,[]);
  L:=Form7.Query1.FieldByName('Lines').AsString;
  F:=Form7.Query1.FieldByName('Fiders').AsString;
  Form7.Table1.Locate('Number;Lines;Fiders',VarArrayOf([Mufts,L,F]),[]);
  Form7.Table1.Delete;
end;
{
при закрытии всей формы мы
уничтожим все компоненты
прикрепленные компоненту Image1
}
procedure TForm7.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Image1.DestroyComponents;
end;

end.
trminator
Надо же, хоть что-то из моих советов заработало ;D
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.