Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1225721676
kazar
2008-11-03 17:14
2009.01.04
вопросы по Halcyon


15-1226085073
dik
2008-11-07 22:11
2009.01.04
Как активировать Help


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


15-1225451619
KSergey
2008-10-31 14:13
2009.01.04
Беда с компьютером: винчестер постоянно занят


2-1227608592
Brabus
2008-11-25 13:23
2009.01.04
отсеивать ComboBox.Items





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский