Enabled

Тема в разделе "Pascal and Delphi", создана пользователем ilya00, 13 янв 2013.

  1. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    помогите написать простенькую функцию Enabled типа Boolean :(
    что то типа: if Enabled then {какие то действия} else {другие действия}
    и при присвоение где то уже в другой процедуре Enabled:= True\False чтобы работало
     
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    Код (Text):
    function Enabled:Boolean;
    begin
    result:=true;
    end;
     
  3. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    проблема в том что при присвоении False программа намертво зависает...
     
  4. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    значит ошибка в программе
     
  5. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    нет никакой ошибки в программе, просто тут же рекурсия получается вот она и тупит...

    вот код, никаких ошибок тут нет...

    Код (Delphi):
    function Enabled:Boolean;
    begin
    result:= Enabled;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Enabled:= True;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Enabled:= False;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if Enabled
    then Label1.Caption:= 'Enabled'
    else Label1.Caption:= 'Desabled';
    end;
    после присвоения по кнопке Button3 - Enabled:= False; программа не реагирует на любые клики мышки и закрывается только через диспетчер, хотя Label1.Caption и присваевает Desabled...

    п.с. вы сами откройте делфю и протестите
     
  6. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    upd: экспериментальным путем до меня дошло что лучше назвать функцию PEnabled например, чтобы не путалась с Enabled той же Button

    но тут мне выдает ошибку: Left side cannot be assigned to
    это при вот таком коде функции:

    Код (Delphi):
    Function PEnabled: Boolean;
    begin
    if PEnabled
    then
    begin
    Result:= True;
    {какие то действия}
    end
    else
    begin
    Result:= False;
    {какие то действия}
    end;
    end;
     
  7. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    19
    Это и есть ошибка, в моей версии никаких рекурсий, а у вас непойми что.
    То что вы пытаетесь сделать на зывается - свойство, но чтобы его сделать нужен класс..

    Добавлено: Это и есть ошибка, в моей версии никаких рекурсий, а у вас непойми что.
    То что вы пытаетесь сделать на зывается - свойство, но чтобы его сделать нужен класс..
     
  8. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    подскажите пожалуйста как сделать это через класс
     
  9. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    Ваш код:
    Код (Delphi):
    function Enabled:Boolean;
    begin
    result:= Enabled;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    Enabled:= True;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Enabled:= False;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if Enabled
    then Label1.Caption:= 'Enabled'
    else Label1.Caption:= 'Desabled';
    end;
    Теперь давайте подумаем... на кнопках идет именно пересечение свойств кнопки с именем вашей функции, чтобы его не было, можно дополнить в класс формы метод enabled и выглядеть это будет вот так:
    Код (Delphi):
    function form1.enabled:boolean
    НО: у формы есть такое свойство enabled, потому если добавить такой метод то, либо компилятор обругается, либо потом поползут ошибки... И вообще чтобы не париться насчет этого, не нужно добавлять/менять классы, сделайте следующее (это называется глобальные переменные):
    1) Найдите строчку var form1:TForm1;
    2) добавте в тот самый "var" переменную enabled:boolean;
    3) Тогда, функцию Enabled:boolean нафиг убрать и получиться:
    Ваш код:
    Код (Delphi):
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    unit1.Enabled:= True;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    unit1.Enabled:= False;
    end;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if unit1.Enabled then Label1.Caption:= 'Enabled'
    else Label1.Caption:= 'Desabled';
    end;
    P.S. unit1 - это имя модуля, в котором обозвана ваша переменная, к ней можно будет обратиться из любого другого модуля, чтобы инициировать начальные значения (не авось какие), то например дополнить
    Код (Delphi):
     FormCreate(...)
    и написать там:
    Код (Delphi):
    unit1.enabled:=true/false
    ;
     
  10. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    честно говоря я хотел чтобы именно в отдельной (не стандартной функции) происходили действия... ну да ладно, мне тут уже объяснили что Enabled надо юзать как переменнную - параметр для функции, видимо по другому никак :(
     
  11. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    Все "стандартные функции" - это функции, которые реагируют на события, ибо смысл визуального программирования именно в этом... Писать новый обработчик событий для тех же событий, что итак есть - это мягко говоря странно, но возможно...
    Или же если речь идет просто об отдельной функции, то напишите её... назовите как хотите (и конкретизируйте её вызов (if unit1.enabled then ... ) - для вашего первого кода) , потом полюбому придеться привязать её к какому-либо событию (будь то нажатие на кнопку, или срабатывание таймера, создание формы, инициация создания формы или еще что) иначе она просто не включиться) и никогда не заработает
     
  12. ilya00

    ilya00 Member

    Регистрация:
    13 янв 2013
    Сообщения:
    23
    Симпатии:
    0
    а можно ли создать обработчик событий для переменной?

    например существует процедура:

    Код (Delphi):
    Procedure Process(Enabled: Boolean);
    begin
    if Enabled
    then {какие то действия}
    else {какие то действия};
    end;
    и существует переменная Enabled (не та что в процедуре, а отдельно)

    Код (Delphi):
    Var Enabled: Boolean; //в глобальных переменных
    и можно ли теперь создать что то типа:

    Код (Delphi):
    Procedure EnabledChange(Enabled: Boolean);
    begin
    Process(Enabled);
    end;
    главный вопрос: будет ли процедура EnabledChange вызываться при изменении глобальной переменной Enabled?
     
  13. Senset

    Senset Well-Known Member

    Регистрация:
    11 сен 2006
    Сообщения:
    136
    Симпатии:
    0
    1) Для создания событий используйте TNotifyEvent - тогда можно будет оперативно отлавливать изменение переменной (как это делается - мануалок в нете море)
    2) Если вы создали переменную и процедуру в одном блоке кода (модуле)... то сами подумайте как компилятор определит что вы хотите? (обратиться к переменной или процедуре)... чтобы было четкое определение, то:
    2.1) либо var enabled:boolean; procedure enabled(x:integer):boolean; - обратите внимание, что теперь будет четко видно что вы хотите
    2.2) забыть о языке высокого уровня и использовать turbo asm или delphi asm, где вашей процедуре и переменной сами зададите адресацию и сами вызовите по нужному адресу. На практике же такой критичности и жизненной необходимости в этом нет и еще не было (проще переименовать процедуру или переменную). И подсказать вам в этом вопросе asm (конкретно какой адрес и маркировки) никто не сможет, потому как компы сейчас настолько разные, что написать низкоуровневый софт для каждого железа - это уже ваша задача и первая железка, которая должна сработать - это ваша :)
     
Загрузка...
Похожие Темы - Enabled
  1. ilya00

    Enabled

    ilya00, 13 янв 2013, в разделе: Delphi - FAQ
    Ответов:
    2
    Просмотров:
    1.578
  2. PaVaP
    Ответов:
    2
    Просмотров:
    3.776

Поделиться этой страницей