Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




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


2-1176958996
Dmdel
2007-04-19 09:03
2007.05.13
Раскпывающийся список в ComboBox-е


15-1176389994
GeLLeR
2007-04-12 18:59
2007.05.13
Как перевести код


1-1173953857
__DATA__
2007-03-15 13:17
2007.05.13
Работа с компонентами в многопоточном приложении


15-1176784634
Kholl
2007-04-17 08:37
2007.05.13
Internal error при инсталяции BDS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский