![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ошибка присоздании [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]В каком работает?
В каком ругается?