Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 19.06.2011, 23:16
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Главное отличие использование метода CreateNew вместо Create. Конструктор
Код:
constructor TMyForm.CreateNew(AOwner: TComponent);
var
  NonClientMetrics: TNonClientMetrics;
begin
  inherited CreateNew(AOwner);
  NonClientMetrics.cbSize := sizeof(NonClientMetrics);
  if SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, @NonClientMetrics, 0) then
    Font.Handle := CreateFontIndirect(NonClientMetrics.lfMessageFont);
end;
в принципе можно убрать.
Ответить с цитированием
  #17  
Старый 09.07.2011, 23:52
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Доброго всем времени суток!
Допустим, что имеем:
Код:
type
  TSoundButton = class(TButton)
.....

Procedure CreateButtons(DirName: string);
var
  Sbutton1 : TSoundButton;
begin
  Sbutton1:= TSoundButton.Create(Form1);//ñîçäà¸ì êíîïêó íà ôîðìå
  with Sbutton1 do
  begin
    Name:= 'SButton' + inttostr(ButCount);
    Height:= 25;
    Width:= 170;
    Left := 8;
    Top := Top_;
    Caption := DirName;
    Enabled:= true;
    Visible := true;
    parent:=form1.ScrollBox1;
    Sbutton1.OnClick := Form1.SButtonClick;
form1.ListBox1.Items.Add(Sbutton1.Name);
  end;
  Top_:= Top_ + 30;
  Inc (ButCount);
end;

procedure TForm1.SButtonClick(Sender: TObject);
....
... вследствие чего на форме создаётся столько кнопок, сколько папок на диске(подпапок в папке) например: Antivir, System, Util...
Так вот и сам вопрос: как мне из обработчика события Sbutton1.OnClick добраться(использовать) до св-ва Caption := DirName; RunTime созданной Sbutton?

Заранее благодарен
Ответить с цитированием
  #18  
Старый 09.07.2011, 23:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Создай свой топик, не какай в чужих!!!
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #19  
Старый 10.07.2011, 00:53
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Либо объявляейте массив кнопок глобально, либо через перебор компонентов родителя кнопок
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #20  
Старый 10.07.2011, 21:37
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Либо объявляейте массив кнопок глобально, либо через перебор компонентов родителя кнопок
и действительно, без массива - никак, т. к. поутру оказалось, что все кнопки (хоть и с разными .Caption) являются клонами одного экземпляра... Добрался я и до .Caption, и до .Name (стоило лишь декларацию Sbutton1 : TSoundButton; сделать не локальной [в процедуре], а глобальной [перед implementation]), но ListBox1 отображал: Sbutton3(Наме) и Util(Кэпшн) на какую кнопку не ткни.... Хорошо - объявляю
Код:
var
  Form1: TForm1;
  But: Array of TSoundButton;
  ....
локально объявлять бессмысленно - исчезнет по end процедуры, но
Код:
Procedure CreateButtons(DirName: string);
begin
  Sbutton1:= TSoundButton.Create(Form1);//ñîçäà¸ì êíîïêó íà ôîðìå
  with Sbutton1 do
  begin
    Name:= 'SButton' + inttostr(ButCount);
    .....
    parent:=form1.ScrollBox1;
    Sbutton1.OnClick := Form1.SButtonClick;
  But[ButCount]:= Sbutton1;
//form1.ListBox1.Items.Add(Sbutton1.Name);
  end;
  Top_:= Top_ + 30;
  Inc (ButCount);
end;
при компилировании вызывает ошибку EAccessViolation...

И в чём тут соль???

З. Ы. А если не секрет: как перебираются компоненты родителя кнопок?
спапибо
Ответить с цитированием
  #21  
Старый 10.07.2011, 21:43
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Создай свой топик, не какай в чужих!!!
... а на ЧайнаФонском форуме (на точно таком же движке) раздувание тем и веток не очень-то приветствуется.... "Прежде чем задать [может быть дилетантский] вопрос (начать новую тему в которую за пол-года 3-5 человек заглянут) - используй "Поиск" - мож и получишь ответ"... Сорри

Последний раз редактировалось UFO 007, 10.07.2011 в 21:54.
Ответить с цитированием
  #22  
Старый 10.07.2011, 22:01
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от UFO 007
But[ButCount]:= Sbutton1;
А кто, SetLength будет объявлять?
Цитата:
Сообщение от UFO 007
...как перебираются компоненты родителя...
Цикл по ComponentCount
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 10.07.2011 в 22:06.
Ответить с цитированием
  #23  
Старый 10.07.2011, 22:13
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Этот код:
Код:
Procedure CreateButtons(DirName: string);
begin
  Sbutton1:= TSoundButton.Create(Form1);//ñîçäà¸ì êíîïêó íà ôîðìå
  with Sbutton1 do
  begin
    Name:= 'SButton' + inttostr(ButCount);
    .....
    parent:=form1.ScrollBox1;
    Sbutton1.OnClick := Form1.SButtonClick;
  But[ButCount]:= Sbutton1;
//form1.ListBox1.Items.Add(Sbutton1.Name);
  end;
  Top_:= Top_ + 30;
  Inc (ButCount);
end;
фигня. Немного подправим:
Код:
...
  ButCount := 0; // где то на старте

Procedure CreateButtons(DirName: string);
begin
  SetLength(But, ButCount + 1);
  But[ButCount] := TSoundButton.Create(Form1);//ñîçäà¸ì êíîïêó íà ôîðìå
  with But[ButCount] do
  begin
    Name:= 'SButton' + inttostr(ButCount + 1);
    .....
    parent:=form1.ScrollBox1;
    Sbutton1.OnClick := Form1.SButtonClick;
//  But[ButCount]:= Sbutton1;
//form1.ListBox1.Items.Add(Sbutton1.Name);
  end;
  inc(Top_, 30);
  inc(ButCount);
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #24  
Старый 10.07.2011, 22:37
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Что-то я не догнал, что надо сделать...

Код:
procedure TForm1.SButtonClick(Sender: TObject);
begin
 Showmessage((Sender as TSoundButton).Caption);
end;

Так что ли?
Ответить с цитированием
  #25  
Старый 11.07.2011, 09:27
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Ребят, я конечно извиняюсь, но все мы {angvelem, сорри - Вас это не каксается} проглядели одну элементарную вещь: размер массива - [0..Max_Path] и EAccessViolation кончилась... А вот как теперь узнать "номер" нажатой кноки и через него, как через индекс, обратиться к массиву и вытащить нужные данные?

Спасибо

Последний раз редактировалось UFO 007, 11.07.2011 в 10:03.
Ответить с цитированием
  #26  
Старый 11.07.2011, 09:59
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Цитата:
Сообщение от ART
Что-то я не догнал, что надо сделать...

Код:
procedure TForm1.SButtonClick(Sender: TObject);
begin
 Showmessage((Sender as TSoundButton).Caption);
end;

Так что ли?
Ещё раз извиняюсь, но мож нада читкать внимательней, а мож я плохо разжевал... Так вот - механизм следующий: RecurseDir находит первую попавшуюся папку по адресу CurDir + '\Soft\', вызывает CreateButtons кот. создаёт 1-й экземпляр SButton1 с атрибутами Name/Caption := SButton0/Antivir, 2-я папка "генерит" SButton1/Office, 3-я ......2/System, 4-я....3/Util -> RecurseDir.Стоп - папок больше нет. Как оказалось у SButton1 остаются последние аттрибуты, а Antivir, Office и System существовали лишь в момент создания клона и дальнейшее их использование без хранения в массиве по-моему не представляется возможным, а вопрос по массиву - постом выше
Ответить с цитированием
  #27  
Старый 11.07.2011, 21:29
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от UFO 007
... А вот как теперь узнать "номер" нажатой кноки и через него, как через индекс, обратиться к массиву и вытащить нужные данные?
Элементарно, Ватсон. Для подобных дел Borland в своё время предусмотрел свойство TAG. Присваивай ему при создании кнопки значение ButCount.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #28  
Старый 11.07.2011, 22:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от UFO 007
Ещё раз извиняюсь...
Вот пример:
Вложения
Тип файла: rar prj6.rar (1.3 Кбайт, 11 просмотров)
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 12.07.2011 в 00:24.
Ответить с цитированием
  #29  
Старый 12.07.2011, 00:09
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Скорее всего я опять не понял, но...
Вложения
Тип файла: rar ыыыы.rar (5.2 Кбайт, 16 просмотров)
Ответить с цитированием
  #30  
Старый 12.07.2011, 00:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ART
Скорее всего я опять не понял, но...
Надеюсь, мы насочиняли то, что автору и нужно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter