Помощь - Поиск - Пользователи - Календарь
Полная версия: снова динамические компоненты
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.