Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
ВнизСоздание у уничтожение компонентов в RunTime Найти похожие ветки
← →
Nastya (2008-11-23 21:07) [0]Подскажите уважаемые мастера и неочень, что в этом примерчике не правильно
(вылетает 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.
← →
Ksander (2008-11-23 21:37) [1]Да все должно по идее работать
← →
{RASkov} © (2008-11-23 21:50) [2]> [0] Nastya (23.11.08 21:07)
> OnClick := DelOrder;
тут ошибка.... нельзя так удалять.... т.е. в методе объекта удалять сам объект нельзя.
← →
DVM © (2008-11-23 21:54) [3]
> OnClick := DelOrder;
Надо послать окну формы сообщение (причем через PostMessage), а в параметрах, что мы хотим удалить. В обработчике сообщения удаляем нужное.
← →
{RASkov} © (2008-11-23 21:57) [4]Лучше послать сообщение методом Post, например форме-контейнеру, при поимке которого и вызвать DelOrder, или прямо там и удалять...
и лучше наверное всеж счетчик(цикл) обратный, хотя это, имхо, привычка что ли...
← →
{RASkov} © (2008-11-23 21:58) [5]> [3] DVM © (23.11.08 21:54)
сорри... не обновил перед отправкой) воскресенье вроде... :)
← →
Ksander (2008-11-23 22:03) [6]
> DVM © (23.11.08 21:54) [3]
>
> > OnClick := DelOrder;
>
> Надо послать окну формы сообщение (причем через PostMessage),
> а в параметрах, что мы хотим удалить. В обработчике сообщения
> удаляем нужное.
Можно показать на полном примере с этим пост Мессаге, как это должно
выглядеть? и не затруднит, заранее спасибо
← →
Nastya (2008-11-23 22:06) [7]
> Ksander (23.11.08 22:03) [6]
Вот вот, если можно плз
← →
DVM © (2008-11-23 22:37) [8]
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:51) [9]
> DVM © (23.11.08 22:37) [8]
Ага спасибо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c