![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание у уничтожение компонентов в RunTime [D7, XP]
Nastya © (2008-11-23 21:07:00)Подскажите уважаемые мастера и неочень, что в этом примерчике не правильно
(вылетает Access Violation или Abstract Error), когда кликаем на первой
созданой панели в ScrollBox
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
procedure CreateOrderBoard(Index: Integer);
procedure DelOrder(Sender: TObject);
procedure FormOrders;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
OrderBoard: TPanel;
implementation
{$R *.dfm}
procedure TForm1.DelOrder(Sender: TObject);
begin
while ScrollBox1.ControlCount > 0 do
ScrollBox1.Controls[0].Free;
end;
procedure TForm1.FormOrders;
var
i: Integer;
begin
for i :=0 to 5 do
CreateOrderBoard(i);
end;
procedure TForm1.CreateOrderBoard(Index: Integer);
begin
//панель
OrderBoard := TPanel.Create(ScrollBox1);
with OrderBoard do
begin
Parent := ScrollBox1;
SetBounds(5, Index * 35, 596,30);
Caption := IntToStr(Index);
Align := alTop;
OnClick := DelOrder;
end;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
FormOrders;
end;
end.
Nastya (2008-11-23 22:51:00) [1]
> DVM © (23.11.08 22:37) [8]
Ага спасибо
DVM (2008-11-23 22:37:00) [2]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
WM_MYMESSAGE = WM_USER + 100;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure OnMyMessage(var Msg: TMessage); message WM_MYMESSAGE;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.OnMyMessage(var Msg: TMessage);
begin
TButton(Msg.WParam).Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(Handle, WM_MYMESSAGE, longint(Sender), 0);
end;
end.
Nastya (2008-11-23 22:06:00) [3]
> Ksander (23.11.08 22:03) [6]
Вот вот, если можно плз
Ksander (2008-11-23 22:03:00) [4]
> DVM © (23.11.08 21:54) [3]
>
> > OnClick := DelOrder;
>
> Надо послать окну формы сообщение (причем через PostMessage),
> а в параметрах, что мы хотим удалить. В обработчике сообщения
> удаляем нужное.
Можно показать на полном примере с этим пост Мессаге, как это должно
выглядеть? и не затруднит, заранее спасибо
{RASkov} (2008-11-23 21:58:00) [5]> [3] DVM © (23.11.08 21:54)
сорри... не обновил перед отправкой) воскресенье вроде... :)
{RASkov} (2008-11-23 21:57:00) [6]Лучше послать сообщение методом Post, например форме-контейнеру, при поимке которого и вызвать DelOrder, или прямо там и удалять...
и лучше наверное всеж счетчик(цикл) обратный, хотя это, имхо, привычка что ли...
DVM (2008-11-23 21:54:00) [7]
> OnClick := DelOrder;
Надо послать окну формы сообщение (причем через PostMessage), а в параметрах, что мы хотим удалить. В обработчике сообщения удаляем нужное.
{RASkov} (2008-11-23 21:50:00) [8]> [0] Nastya (23.11.08 21:07)
> OnClick := DelOrder;
тут ошибка.... нельзя так удалять.... т.е. в методе объекта удалять сам объект нельзя.
Ksander (2008-11-23 21:37:00) [9]Да все должно по идее работать