Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.01.04;
Скачать: CL | DM;

Вниз

Создание у уничтожение компонентов в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1227341687
Андрей (начинающий)
2008-11-22 11:14
2009.01.04
смена цвета в StringGrid


15-1226235050
ИванН
2008-11-09 15:50
2009.01.04
Сортировка выбором


2-1227090068
oracled
2008-11-19 13:21
2009.01.04
IdHTTP


15-1226226918
palva
2008-11-09 13:35
2009.01.04
Файл chm не показывает страниц


2-1227019105
Борис
2008-11-18 17:38
2009.01.04
Задача с двумя массивами