Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.13;
Скачать: CL | DM;

Вниз

ошибка присоздании   Найти похожие ветки 

 
Steep ©   (2007-04-20 11:55) [0]

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

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

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"


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

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


 
clickmaker ©   (2007-04-20 11:59) [2]

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


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

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


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


> Undeclared identifier: "Self"

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


 
Steep ©   (2007-04-20 12:01) [5]

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

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


 
trubin ©   (2007-04-20 12:02) [6]


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

Весь не надо.

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


 
trubin ©   (2007-04-20 12:05) [7]


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


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

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


 
ЮЮ ©   (2007-04-20 12:12) [8]

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

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

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


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

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


 
Steep ©   (2007-04-20 13:23) [10]

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

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

....


 
Ega23 ©   (2007-04-20 13:35) [11]


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


А почему application?


 
trubin ©   (2007-04-20 13:37) [12]

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

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


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


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


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

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


 
trubin ©   (2007-04-20 13:42) [14]


> А почему application?


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


 
trubin ©   (2007-04-20 13:44) [15]

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


 
Steep ©   (2007-04-20 13:45) [16]


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

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


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


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

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

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

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


 
Ega23 ©   (2007-04-20 13:46) [18]


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


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

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


 
trubin ©   (2007-04-20 13:59) [19]


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


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

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

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


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


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


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

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;




Страницы: 1 вся ветка

Текущий архив: 2007.05.13;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.03 c
3-1172011298
Slimer
2007-02-21 01:41
2007.05.13
Работа BDE в интернет


1-1174296970
San ciz
2007-03-19 12:36
2007.05.13
Иконака из длл в Timage. Возможно ли?


1-1173974496
Маша_Семенова
2007-03-15 19:01
2007.05.13
шифр Вижинера


3-1172124141
userDelf
2007-02-22 09:02
2007.05.13
Проблема работы приложения на компах кроме моего


15-1176642479
Knight
2007-04-15 17:07
2007.05.13
Смотрю видео через Paint&#133