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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2014, 19:55   #1
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
По умолчанию type

так, а теперь скажите..
мне, для моего случая, нужно создать массив компонентов определенного типа, со всеми параметрами, как и у SpeedButton, только + ещё один тэг.
вот я начал всё обозначать:
Код:
type
   TButtonRec = record
      Tag1, Tag2 : Integer;
      Parent : TForm;
      Left : integer;
      Top : integer;
      Height : integer;
      Width : integer;
      Glyph : TagBitmap;
  end;
 
var
  Buttons: Array [1..81] of TButtonRec;
  SpeedButtonA1:TSpeedButton;
пока всё правильно?

Теперь, в процедуре создания формы, создаю и этот массив записи:
Код:
procedure TForm6.FormCreate(Sender: TObject);
 begin
// создание  buttons (массива кнопок)
  for I := Low(buttons) to High(buttons) do     // от первого компонента массива до последнего
    begin
     buttons[i] := SpeedButtonA1.Create(Owner);
     buttons[i].Parent := Form6;
     buttons[i].Left := XX[i];
     buttons[i].Top := YY[i];
     buttons[i].Height := 34;
     buttons[i].Width := 34;
     buttons[i].Tag1 := i;
     buttons[i].Glyph.LoadFromFile('путь');
     buttons[i].OnClick := SpeedButtonA1.Click;
     buttons[i].OnMouseEnter := SpeedButtonA1MouseEnter;
     buttons[i].OnMouseLeave := SpeedButtonA1MouseLeave;
    end;
End;
 
...
 
// процедуры событий SpeedButtonA1.Click; SpeedButtonA1MouseEnter; SpeedButtonA1MouseLeave;   заданы ниже, с ними проблем нет.
компилятор подчеркивается и ругается:
на Create - " Undeclared identifier: 'LoadFromFile' "
на LoadFromFile - " Undeclared identifier: 'LoadFromFile' "
на OnClick - "Undeclared identifier: 'OnClick' "

как я понял, ругается, потому что не обозначил эти события. как и где их записать, что бы всё работало?
Nikolas_555 вне форума Ответить с цитированием
Старый 10.05.2014, 20:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SpeedButtonA1 это имя переменной, а не класс. Это я к сведенью, чтоб указать тебе на некошерность создания объекта. Скажем так - не запрещено, но не по феншую.
Цитата:
на Create - " Undeclared identifier: 'LoadFromFile' "
Какая у тебя делфи? Посмоти в хелпе обладает ли твоя TSpeedButton таким методом у свойства Glyph. Насколько помню в D6 ее не было к примеру.
Цитата:
buttons[i].OnClick := SpeedButtonA1.Click;
Не правильно. Это процедура. Тебе нужно писать так:
Код:
buttons[i].OnClick := SpeedButtonA1OnClick;
Если конечно метод с таким объектом на форме определен.
Посмотри как ты с buttons[i].OnMouseEnter := SpeedButtonA1MouseEnter; сделал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.05.2014, 20:09   #3
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
SpeedButtonA1 это имя переменной, а не класс. Это я к сведенью, чтоб указать тебе на некошерность создания объекта. Скажем так - не запрещено, но не по феншую.

Какая у тебя делфи? Посмоти в хелпе обладает ли твоя TSpeedButton таким методом у свойства Glyph. Насколько помню в D6 ее не было к примеру.
у меня Делфи 2007, там у SpeedButton-ов есть свойство Glyph.
Nikolas_555 вне форума Ответить с цитированием
Старый 10.05.2014, 20:12   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

это какой-то бред, удалите его пока не поздно
eval вне форума Ответить с цитированием
Старый 10.05.2014, 20:20   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure Click(Sender: TObject);
    procedure MouseLeave(Sender: TObject);
    procedure MouseEnter(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyButton = class(TSpeedButton)
  private
    FTag2: Longint;
  published
    property Tag2: Longint read FTag2 write FTag2 default 0;
  end;

var
  Form1: TForm1;
  Buttons: Array [1 .. 5] of TMyButton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i := Low(Buttons) to High(Buttons) do
  begin
    Buttons[i] := TMyButton.Create(Owner);
    Buttons[i].Parent := Form1;
    Buttons[i].Left := 20 + 100 * i;
    Buttons[i].Top := 30;
    Buttons[i].Height := 34;
    Buttons[i].Width := 34;
    Buttons[i].Tag2 := i;
    // Buttons[i].Glyph.LoadFromFile('путь');
    Buttons[i].OnClick := Click;
    Buttons[i].OnMouseEnter := MouseEnter;
    Buttons[i].OnMouseLeave := MouseLeave;
  end;
End;

procedure TForm1.Click(Sender: TObject);
begin
  showmessage('click');
end;

procedure TForm1.MouseEnter(Sender: TObject);
begin
  (Sender as TMyButton).Caption := 'enter';
end;

procedure TForm1.MouseLeave(Sender: TObject);
begin
  (Sender as TMyButton).Caption := 'leave';
end;

end.
Кнопки появляются, но насколько такой код верен, не могу сказать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 10.05.2014, 20:22   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
там у SpeedButton-ов есть свойство Glyph.
А у этого свойства есть такой метод?
Хотя я сразу невнимательно глянул:
Цитата:
Glyph : TagBitmap;
Это что? Это зачем? У TagBitmap разве есть методы? Проверь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.05.2014, 20:25   #7
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Если конечно метод с таким объектом на форме определен.
Посмотри как ты с buttons[i].OnMouseEnter := SpeedButtonA1MouseEnter; сделал.
Этот компонент на форме определён, вот все события к нему:
Код:
procedure TForm6.SpeedButtonA1Click(Sender: TObject);
begin
     if (kol mod 2 <> 0) then
                          begin
                           ImageList1.GetBitMap(1,TSpeedButton(Sender).Glyph);
                          end

                         else
                          Begin
                           ImageList1.GetBitMap(2,TSpeedButton(Sender).Glyph);
                          End;
     F := False;
     kol:=kol+1;
end;

procedure TForm6.SpeedButtonA1MouseEnter(Sender: TObject);
begin
 if (F=True) then
     Begin
       if (kol mod 2 <> 0) then
       ImageList1.GetBitMap(1,TSpeedButton(Sender).Glyph)
                            else
       ImageList1.GetBitMap(2,TSpeedButton(Sender).Glyph);
     End;
end;

  procedure TForm6.SpeedButtonA1MouseLeave(Sender: TObject);
begin
 if (F=True) then
     TSpeedButton(Sender).Glyph.LoadFromFile('путь');

end;
Nikolas_555 вне форума Ответить с цитированием
Старый 10.05.2014, 20:27   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

BDA вот что толку?
автор на этот код будет смотреть как баран на новые ворота..
для него что TButtonRec что TSpeedButton, разницы нет
eval вне форума Ответить с цитированием
Старый 10.05.2014, 20:28   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Этот компонент на форме определён, вот все события к нему:
Поясняю: SpeedButtonA1.Click; это вызов процедуры а не получение события.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.05.2014, 20:28   #10
Nikolas_555
Пользователь
 
Аватар для Nikolas_555
 
Регистрация: 16.11.2013
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А у этого свойства есть такой метод?
Хотя я сразу невнимательно глянул:

Это что? Это зачем? У TagBitmap разве есть методы? Проверь.
убрал.
тогда + ещё ошибка с Glyph.
" Undeclared identifier: 'Glyph' "
Nikolas_555 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ not implemented in type 'istream' for arguments of type 'float *'из-за чего эта ошибка и как исправить? Mitax-47 Помощь студентам 1 10.05.2013 15:48
Could not convert variant of the type (String) into type (Boolean) Silly Student C++ Builder 0 19.11.2011 13:06
Отличие type T = Object от type T = Class? Warn Общие вопросы Delphi 8 04.11.2011 19:20
Could not convert variant of type (Olestr) into type (Double) java_91 Общие вопросы Delphi 1 18.02.2011 18:46
Could not convert variant of type (UnicodeString) into type (Double) postaveche БД в Delphi 11 13.12.2010 16:41