Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ошибка присоздании [XP]


Steep ©   (2007-04-20 11:55:00) 

Еще вот какая бага выскочила...

в одном юните работает в другом ругается...

Type
 TPathButton = class(TSpeedButton)
 public
   PathArray: Array[1..5] of String;
end;


procedure RegLoadButton(Sender: TObject; Count: integer; Hint: string; ArrayPath: array of string);
var
 i, k: Integer;
 ico: TIcon;
 btn: TPathButton;
begin
 with TRegistry.Create do
 try
   RootKey := HKEY_CURRENT_USER;
   // RootKey := HKEY_LOCAL_MACHINE;
   if OpenKey('\SOFTWARE\SteepSoft\RunPanel\button'+IntToStr(Count)+'\', false) then
   begin
     For k:=0 to ReadInteger('FBC') do
     begin
        btn := TPathButton.Create(Self);//!!!!ЗДесь ругается!!!......
       With btn do
       begin
         //Открытие и заливание иконки
         Parent := Frm_RunPanel.ScrollBox1;
         SetBounds( 1, (32*k)+(1*(k+1)), 32, 32 );
       
         ..................

         OnClick := FastButtonClick;
       end;
     end;
     CloseKey;
   end;
 finally
   Free;
 end;
end;


Ошибка такая:
[Pascal Error] PanelUnit.pas(210): E2003 Undeclared identifier: 'Self'


Ega23   (2007-04-20 14:06:00) [1]


> но в подавляющем большинстве случаев, это в методе класса
> делается, или с этим тоже спорить будешь?
>


Я знаю только то, что в качестве обработчика может быть назначен только метод. А уж откуда он взялся - дело десятое.
Вот пожалуйста, небезопасный код:

function ShowTexLogFile(const aFileName:String):Boolean;
           procedure BtnClearClick(Sender:TObject);
           var
            i:Integer;
            _memo:TMemo;
           begin
            if (Sender is TForm) then
             begin
              With TForm(Sender) do
               begin
                for i:=0 to ComponentCount-1 do
                 if (Components[i] is TMemo) then
                  if UpperCase(TMemo(Components[i]).Name)=UpperCase('memSQLLogMonitor') then
                   begin
                    _memo:=TMemo(Components[i]);
                    _memo.Lines.Clear;
                    _memo.Lines.Add(' ');
                    _memo.Lines.SaveToFile(_memo.Hint);
                    Break;
                   end;
               end;//With TForm(Sender) do
             end;//if (Sender is TForm) then
           end;//procedure BtnClearClick(
var
aForm:TForm;
aPanel:TPanel;
OnClearClick:TMethod;
.....

begin
Result:=False;
//if not FileExists(aFileName) then Exit;
try
 ........

  With TButton.Create(aPanel) do
   begin
    Parent:=aPanel;
    Height:=25;
    Width:=100;
    Font.Size:=10;
    Top:=10; //aPanel.ClientHeight-30;
    Left:=aPanel.Width-220;
    Anchors:=[akTop, akRight];
    Caption:='Очистить';
    OnClearClick.Code:=@BtnClearClick;
    OnClearClick.Data:=aForm;
    OnClick:=TNotifyEvent(OnClearClick);
   end;


trubin   (2007-04-20 13:59:00) [2]


> Почему форму? Чем лучше?
> И почему это я не могу реакцию на щелчок по кнопке в свободную
> процедуру написать? А потом её к TMethod привести и назначить
> в качеств обработчика?


Можно, можно, эту реакцию черт те знает куда засунуть, не спорю, зависит от обстоятельств, но в подавляющем большинстве случаев, это в методе класса делается, или с этим тоже спорить будешь?

Откуда я знаю, что у него за проект, может это 1 форма, и 3 кнопки.

Больше, я думаю спорить смысла нет, а то модератор по шапке стукнет, и будет прав.


Ega23   (2007-04-20 13:46:00) [3]


> Понятно, что лучше туда передать форму на которой кнопка
> лежит ;)


Почему форму? Чем лучше?
И почему это я не могу реакцию на щелчок по кнопке в свободную процедуру написать? А потом её к TMethod привести и назначить в качеств обработчика?

Ты прежде чем что-либо постить сначала думай. А лучше внимательно прочитай какую-нибудь книжку по Delphi  для начального уровня. Ну для среднего - уже точно пора почитать.


Плохиш   (2007-04-20 13:46:00) [4]


> trubin ©   (20.04.07 13:37) [12]
> http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342

Нажал на ссылку, долго плякал...

> trubin ©   (20.04.07 13:42) [14]

Стесняюсь спросить, а можно (шёпотом) я туда нил поставлю?


Steep   (2007-04-20 13:45:00) [5]


>  то ... все равно.

Мне пока абсолютно все равно :) главное чтоб работало ;)
Не силен пока я в этих self, parent, sender....


trubin   (2007-04-20 13:44:00) [6]

to Ega23 пост [12] не тебе писал


trubin   (2007-04-20 13:42:00) [7]


> А почему application?


Понятно, что лучше туда передать форму на которой кнопка лежит ;) , но раз уж человек реакцию на щелчок по кнопке в свободную процедуру пишет, то ... все равно.


Ega23   (2007-04-20 13:42:00) [8]


> Прочитай статью, может поможет, а лучше внимательно прочитай
> какую-нибудь книжку по Delphi для начального уровня.


гггг  :)
Упалпацтул.

Так всё-таки, ты не ответил на конкретный вопрос: почему Application? Почему не nil, не panel или что-нибудь ещё?


trubin   (2007-04-20 13:37:00) [9]

http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=342

Прочитай статью, может поможет, а лучше внимательно прочитай какую-нибудь книжку по Delphi для начального уровня.


Ega23   (2007-04-20 13:35:00) [10]


>
> Можно:
> btn := TPathButton.Create(application);


А почему application?


Steep   (2007-04-20 13:23:00) [11]

ЮЮ
ты был прав насчет

> Дальше тебя ждут грабли в   OnClick := FastButtonClick;

....


Steep   (2007-04-20 12:25:00) [12]

>btn := TPathButton.Create(application);
Пасип вроде не ругается


ЮЮ   (2007-04-20 12:12:00) [13]

>Просто переношу некоторые дествия в другой юнит...

сначала подумай, на кой вообще в этом модуле нужна будет эта процедура?

Дальше тебя ждут грабли в
 OnClick := FastButtonClick;


trubin   (2007-04-20 12:05:00) [14]


> а что тогда писать??


Можно:
btn := TPathButton.Create(application);

в юните должна быть ссылка на юнит Forms


trubin   (2007-04-20 12:02:00) [15]


> что весь юнит переписывать?

Весь не надо.

Как написано в [2] в методе класса он ругаться не будет, а тут у тебя свободная процедура


Steep   (2007-04-20 12:01:00) [16]

а что тогда писать??

да действительно - там был клик по кнопке...


_Аноним   (2007-04-20 12:00:00) [17]


> Undeclared identifier: 'Self'

Еще бы.
Ты же вызываешь из обычной процедуры, в ней нет никакого Self
Self актуален ,когда мы находимся в теле методе


Steep   (2007-04-20 12:00:00) [18]

Просто переношу некоторые дествия в другой юнит...
Возникают какие-то непонятные траблы...
>В каком работает?
>В каком ругается?
что весь юнит переписывать?


clickmaker   (2007-04-20 11:59:00) [19]

в Self передается неявно указатель на экземпляр класса в методе класса.
А у тебя это разве метод класса?


trubin   (2007-04-20 11:57:00) [20]

В каком работает?
В каком ругается?


Наверх

Титульная страница Поиск, карта сайта Написать письмо