Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2008, 17:28   #1
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию Проблема с созданием компонентов

На компоненте AdvPageControl создаю вкладку на ней ещё 1 компонент.
Код:
  
procedure TForm1.Button1Click(Sender: TObject);
var   tab : TAdvTabSheet;
       SMemo: TSynMemo;
begin
    //создаю вкладку
    tab:=TAdvTabSheet.Create(Form1);      
    tab.AdvPageControl:=AdvPageControl1;
    tab.Caption:=' Новый файл  '+IntToStr(AdvPageControl1.PageCount); 
    tab.AdvPageControl.ActivePage:=Tab;   


    //Создаю компонент SynMemo
    SMemo := TSynMemo.Create(Tab);      
    //SMemo.name:='SynMemo'+intToStr(AdvPageControl1.PageCount);
    SMemo.Parent := Tab;
    SMemo.Align := alClient;
    Smemo.PopupMenu:=PopupMenu1;
    Smemo.SetFocus;
end;

//Нажимаем в контекном меню кнопку отменить
procedure TForm1.N1Click(Sender: TObject);
var      Memo: TComponent;
begin
   //ищем компонент
   Memo:= FindComponent('SynMemo'+IntToStr((AdvPageControl1.ActivePageIndex+1)));
  (Memo as TSynMemo).Undo;  
end;
//При выполении этой процедуры выдаёться исключение 
//"EAccessViolation", т.е. я так понимаю
//что такого компонента на форме не находиться. Я пытался указать имя, 
//сам вот так 
//SMemo.name:='SynMemo'+intToStr(AdvPageControl1.PageCount);
//Но всё равно одно и тоже
В чём проблема, что я делаю не правильно?
Долго пытался решить её сам, если компоненты не создавать динамически, а просто сделать например 3 вкладки, на них поместить Мемо, и использовать последнию процедуру всё работает. Я так понял всё упираеться в имя компонента.

Последний раз редактировалось dr.Chas; 25.04.2008 в 17:34.
dr.Chas вне форума Ответить с цитированием
Старый 25.04.2008, 17:49   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

//ищем компонент
Memo:= FindComponent('SynMemo'+IntToStr((A dvPageControl1.ActivePageIndex+1))) ;
if Memo<>nil then
(Memo as TSynMemo).Undo;
А вот это - раскомментировать:
//SMemo.name:='SynMemo'+intToStr(AdvP ageControl1.PageCount);
Вы же по имени ищете, а его - нет!
И старайтесь переменным не давать зарезервированные слова в качестве имен.
mihali4 вне форума Ответить с цитированием
Старый 25.04.2008, 19:57   #3
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
//ищем компонент
Memo:= FindComponent('SynMemo'+IntToStr((A dvPageControl1.ActivePageIndex+1))) ;
if Memo<>nil then
(Memo as TSynMemo).Undo;
Так вот, самое то что результат этого поиска nil, ща проверил добавил else и сработало иначе.

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А вот это - раскомментировать:
//SMemo.name:='SynMemo'+intToStr(AdvP ageControl1.PageCount);
И это пробывал всё равно не помогает. Даже делал так чтобы узнать какое имя у этого компонента:
Код:
   SMemo.Name:='SynMemo'+intToStr(AdvPageControl1.PageCount);
   MessageDlg(SMemo.Name,mtError,[mbOk],0);
Выводит имя которое задал, но всё равно при выполение процедуры вызываеться исключение.
P.S.: Ща проделал со стандартными компонентами всё тоже самое.
Главное с не с динамическими компонентами последняя процедура работает нормально. Значит что то не то при создании этих компонентов.
dr.Chas вне форума Ответить с цитированием
Старый 25.04.2008, 20:02   #4
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Извиняюсь канешно, что так много флужу, но решить сам не могу, щас нашёл даже в какой строчке ошибка, но как её решить незнаю.
Код:
  
    //Вот в этой строке даже точнее  
    SMemo := TSynMemo.Create(Tab);         
   // Нашёл я таким способом, заменил в этой строке Tab, на Form1, 
   //и всё прекрасно работает.
dr.Chas вне форума Ответить с цитированием
Старый 25.04.2008, 20:12   #5
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Спс уже разобрался сам)))
dr.Chas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: Проблема с созданием объектов Omedus Помощь студентам 4 08.08.2008 18:42
Возникла проблема с созданием таблиц баз данных. Plastik-X БД в Delphi 1 10.12.2007 12:25
Проблема с созданием файла справки belochka Общие вопросы Delphi 5 05.11.2007 18:24
ActionToolBar. Проблема пересечения компонентов nimf Компоненты Delphi 0 18.10.2007 10:42