Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить имя компонента 
:(
    Опции темы
SergV
Дата 14.1.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



Искал по поиску, и смотрел по предложенным ссылкам при вводе имени для темы, нечего не нашел.

Ситуация такая, я в реальном времени создаю вкладку и на ней компонент мемо, имена создаю для вкладки и мемо по имени открытого файла с префиксом. В данный момент имя мемо активной вкладки получаю обходным путём, через получение имени вкладки и удаления префикса и последующего добавления префикся для имени мемо:
Код

var M: TSynMemo;
name: String;
i: Integer;
begin
  name:=memopage.ActivePage.Name;
  i:=length(name);
  name:=copy(name,1,i-3);
  M := TSynMemo(FindComponent('m_'+name)));
end;

Всё работает, но меня не устраивает этот обходной путь, а как напрямую получить не пойму. 
Перепробовал несколько других вариантов, программа компилируется, но при старте вылетает ошибка обращения к памяти. Вобщем результат, имя компонента не определяется, это значить что неправильный брал подход, а как правильно получить так и не нарыл.
PM   Вверх
aktuba
Дата 14.1.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



Если я правильно понял - ты используешь TPageControl. Тогда:
Код

function GetMemoName(Sheet: TTabSheet): string;
var
  Idx: Integer;
begin
  Result := '';
  for Idx := 0 to Sheet.ComponentCount - 1 do
    if Sheet.Components[Idx] is TSynMemo then
      begin
        Result := (Sheet.Components[Idx] as TSynMemo).Name;
        Break;
      end;
end;


Писал без проверки, но суть должна быть ясна. Да, и еще, это сработает, если у мемо при создании Parent присваивать закладку...


--------------------
user posted image
PM MAIL WWW Skype   Вверх
SergV
Дата 14.1.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



aktuba, спасибо за ответ, но это не совсем то что мне надо. Я неправильно сформулировал вопрос, мне надо "М" определить как компонент а не как стринг. Это видно из примера что я привёл, после присвоения я использую эту переменную как имя компонента. 
PM   Вверх
aktuba
Дата 15.1.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

Репутация: 16
Всего: 38



SergV, а немного подправить не судьба?  smile 

Код

function GetMemoName(Sheet: TTabSheet): TSynMemo;
var
  Idx: Integer;
begin
  Result := nil;
  for Idx := 0 to Sheet.ComponentCount - 1 do
    if Sheet.Components[Idx] is TSynMemo then
      begin
        Result := Sheet.Components[Idx] as TSynMemo;
        Break;
      end;
end;



--------------------
user posted image
PM MAIL WWW Skype   Вверх
VICTAR
Дата 15.1.2007, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1108
Регистрация: 6.10.2006

Репутация: 37
Всего: 80



Цитата(aktuba @  14.1.2007,  14:53 Найти цитируемый пост)
Да, и еще, это сработает, если у мемо при создании Parent присваивать закладку... 

A этот вариант сработает всегда. Так, на всякий случай
Код

function TForm1.GetSynMemo(const Sheet: TTabSheet): TSynMemo;
var i : integer;
begin
  result := nil;
  for i:= 0 to ComponentCount - 1 do
    if (Components[i] is TSynMemo)and
      ((Components[i] as TSynMemo).Parent=Sheet) then
        result:=(Components[i] as TSynMemo);
end;



PM MAIL   Вверх
SergV
Дата 15.1.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 4.8.2006
Где: Германия

Репутация: нет
Всего: 1



*SergV, а немного подправить не судьба? *
aktuba, какже правил, вместо стринг подставлял TSynMemo, только в результ не подставил нил. Только есть одна проблема, я в дельфи спец фиговый, уже пол года не садился за дельфи, и не разу не пробовал писать с функциями, тоько с процедурами. Я так и не понял, как правильно обратиться к функции из процедуры? И пройдёт ли такой вариант, если я в функцию добавлю строку:
Код

m:=result;

Проблема в том что я в других процедурах делаю определённые действия, и обращаюсь к активному компоненту TSynMemo, как к "М". 
На другом форуме мне сказали что тот вариант что я использую, самый оптимальный. Тоесть я делаю обращение к компоненту TSynMemo через поиск его по имени закладки. Так как закладку с мемо создаю с одним именем, но с разным префиксом, а при определении я просто беру имя закладки, и меняю префикс, а потом ищу TSynMemo по имени. 

Кстате, может у меня и с созданием не всё впорядке:
Код

procedure TForm1.memocreate;
var
//m: TSynMemo;
T: TRzTabSheet;
begin
  T := TRzTabSheet.Create(self);
  with T do
  begin
    T.PageControl := MemoPage;
    n:= memopage.PageCount-1;
    t.Name:='p_'+name;
    memopage.ActivePageIndex:=n;
  end;
  m := TSynMemo.Create(self);
  with m do
    begin
      visible:=false;
      Parent := Form1.MemoPage.Pages[n]; 
      m.Name:='m_'+name;
    end;
  readmemoconfig;
end;

Просто в дискусии проскочил этот код:
Код

lMemo.Parent := Self;

В моём коде я не делал этого, но при этом всё работает, присвоение паренту этого зельфа обязательно?.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.