Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Вниз

динамический pagecontol и событие к нему   Найти похожие ветки 

 
Тимоха111   (2010-12-27 02:58) [0]

Всем доброго времени суток!
Создаю pagecontrol динамически, на нем динамически создаются табы
 pcontrol := TPageControl.Create(nil);
 pcontrol.Parent := TabParent;
 pcontrol.Align := alClient;
 pcontrol.OnChange := OnMyClick;

Событие onmyclick
procedure TForm1.OnMyClick(Sender: TObject);
begin
 if Sender is TPageControl then
   (findcomponent(format("html_text%d", [Sender.TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[Sender.TabIndex][1]);
end;


но sender категорически отказывается воспринимать pagecontrol, как прикрутить вновь созданному pagecontrol событие?


 
Тимоха111   (2010-12-27 03:04) [1]

вопрос решен
(Sender as TPageControl)


 
Германн ©   (2010-12-27 03:08) [2]


> Всем доброго времени суток!
> Создаю pagecontrol динамически, на нем динамически создаются
> табы
>

Ну и где код, в котором "динамически создаются табы"?

> но sender категорически отказывается

И я его понимаю. :)


 
Тимоха111   (2010-12-27 04:11) [3]

Обработчик события выглядит так:
procedure TForm1.OnButtonClick(Sender: TObject);
begin
 if Sender is TPageControl then
   (findcomponent(format("html_text%d", [(Sender as TPageControl).TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[(Sender as TPageControl).TabIndex][1]);
end;

И все вроде ничего работало, пока не решил я создать отдельную процедуру создания pagecontrol и табов к нему.


procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
...
...
pcontrol := TRzPageControl.Create(nil);
 pcontrol.Parent := TabParent;
 pcontrol.Align := alClient;
 pcontrol.TabOrientation := toLeft;
 pcontrol.TabStyle := tsRoundCorners;
 pcontrol.OnChange := OnButtonClick;

 for i := 0 to length(mymass) - 1 do
 begin
   TabSheet := TrzTabSheet.Create(Self);
   TabSheet.Caption := mymass[i][0];
   TabSheet.PageControl := pcontrol;
...
 end;


Вызываю:
ADDForum(RzPageControl2,OnButtonClick);
Вылетает ошибка AccessViolation ....
компилятор показывает на строчку
  (findcomponent(format("html_text%d", [(Sender as TPageControl).TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[(Sender as TPageControl).TabIndex][1]);


 
v_a_belousov   (2010-12-27 04:56) [4]


> Тимоха111

Я не знаю что ты там делаешь... целиком ты ничего не показываешь!!!
Почему у тебя
procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
а вызываешь ты ADDForum(RzPageControl2,OnButtonClick);
Зачем тебе параметры процедуре если ты их не используешь...
pcontrol := TRzPageControl.Create(nil);
pcontrol.OnChange := OnButtonClick;
И попробовал сам набросать примерно то что у тебя все работает:

procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
var pcontrol: TPageControl;
TabSheet: TTabSheet; i: integer;
begin
pcontrol := TPageControl.Create(nil);
pcontrol.Top := 0;
pcontrol.Left := 0;
pcontrol.Width := 300;
pcontrol.Height := 250;
pcontrol.OnChange := Form1.ButtonClick;
Form1.InsertControl(pcontrol);
for i := 0 to 3 do
begin
  TabSheet := TTabSheet.Create(nil);
  TabSheet.Caption := "Çàêëàäêà ¹"+IntToStr(i+1);
  TabSheet.PageControl := pcontrol;
end;

end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
if Sender is TPageControl then
  TLabel(FindComponent("Label"+IntToStr(TPageControl(Sender).TabIndex))).Caption := IntToStr(TPageControl(Sender).TabIndex);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Add(PageControl1, ButtonClick);
end;


 
v_a_belousov   (2010-12-27 04:58) [5]


> Add(PageControl1, ButtonClick);


> procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);

Вот в этом вопрос где ты тут используешь полученные параметры...


 
Тимоха111   (2010-12-27 12:18) [6]

парднон, да заметил, procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
а вызываешь ты ADDForum(RzPageControl2,OnButtonClick);
тут я просто менял pagecontrol, решил другой попробовать и с код поперепутал, но проблема осталась. Как не использую? мне нужно создать динамически pagecontrol  и присвоить его событие по смене вкладки свое событтие.


 
Ega23 ©   (2010-12-27 12:35) [7]


> мне нужно создать динамически pagecontrol  и присвоить его
> событие по смене вкладки свое событтие.



unit Unit3;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, ComCtrls;

type
 TForm3 = class(TForm)
   Button1: TButton;
   Panel1: TPanel;
   Label1: TLabel;
   procedure FormCreate(Sender: TObject);
 private

   procedure OnPageControlChange(Sender: TObject);

 end;

var
 Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
var
 pc: TPageControl;
 ts: TTabSheet;
 i: Integer;
begin
 pc := TPageControl.Create(Self);
 pc.Parent := Panel1;
 pc.Align := alClient;
 pc.OnChange := OnPageControlChange;

 for i := 1 to 5 do
 begin
   ts := TTabSheet.Create(Self);
   ts.PageControl := pc;
   ts.Caption := "Tab" + IntToStr(i);
 end;

end;

procedure TForm3.OnPageControlChange(Sender: TObject);
begin
 if Sender is TPageControl then
   Label1.Caption := TPageControl(Sender).ActivePage.Caption;
end;

end.


 
Ega23 ©   (2010-12-27 12:42) [8]

Кстати.

pcontrol := TRzPageControl.Create(nil);
.......
for i := 0 to length(mymass) - 1 do
begin
  TabSheet := TrzTabSheet.Create(Self);
.....


Я всего кода не видел, возможно он и вправду корректен. Но я на 99% уверен, что у тебя мемлик.


 
Тимоха111   (2010-12-27 13:40) [9]

Вы правы! Nil был виною)))
поставил self - заработало!!! Спасибо Ega23


 
Ega23 ©   (2010-12-27 13:59) [10]


> Вы правы! Nil был виною)))


Nil был виною тому, что FindComponent не работал.
Но, ИМХО, идеология всё равно выбрана неверно.


 
Тимоха111   (2010-12-27 16:42) [11]

Не могли бы вы подсказать как будет верно для данной задачи?
Спасибо


 
Ega23 ©   (2010-12-27 16:44) [12]


> Не могли бы вы подсказать как будет верно для данной задачи?


Дык задачу озвучить надо, для начала.


 
Тимоха111   (2010-12-27 16:57) [13]

Есть массив в него попадают текстовые данные. Далее я создаю динамически pagecontrol и табу к немы, на этих табах создаются компонеты для вывода текста из массива. Собственно все, потом по табам щелкаю и вижу что в массиве.


 
Ega23 ©   (2010-12-27 17:01) [14]

Ну так и храни свой PageControl в видк ссылки, в чём проблема?



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
1-1249315691
sunnmas
2009-08-03 20:08
2011.03.20
узнать о завершении потока


15-1291491996
bss
2010-12-04 22:46
2011.03.20
Инфомрация в выдаче яндекса


15-1291751037
Сергей М.
2010-12-07 22:43
2011.03.20
А как нужно умудриться


4-1246357819
istok20
2009-06-30 14:30
2011.03.20
запуск процесса из-под сервиса...


15-1291659561
bss
2010-12-06 21:19
2011.03.20
Как определяют PR и тИЦ сайтов?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский