Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> enable disable, переключить процедуру с enable на disabl 
:(
    Опции темы
alyam
Дата 13.9.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



можно ли переключить процедуру с еnable на disable
например, у меня есть процедура Test1, если она disable, то нужно сделать ее enable и наоборот если enable - то сделать ее disable.
что-то типа такого if test1.enable=true then test1.disable?

PM MAIL   Вверх
nitr
Дата 13.9.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



alyam, ну не знаю даже smile вариантов много, к примеру глоб. переменную типа is_on_test1, а в процедуре проверять и менять.


--------------------
PM   Вверх
korob2001
Дата 14.9.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



В перл нет булевых true и false. Здесь всё что есть пустая строка, 0, "0" или undef, есть false. Всё остальное является true. Потому поясни подробнее, что должна функуция вернуть?
Насколько я понял, то если она получила значение true, то вернуть должна false и наоборот. Если да, то можно и не создавать для этого функцию, а просто обращать текущее значение переменной.
Например:
Код

#!/usr/bin/perl -w
use strict;

my $x = 1;     # Включили
print "$x\n";  # 1
$x = !$x;      # Выключили
print "$x\n";  # пустая строка
$x = !$x;      # Опять включили
print "$x\n";  # 1
$x = !$x;      # Выключили
print "$x\n";  # Опять пустая строка

На VB это будет выглядеть так:
Код

txtTest.Enable = Not txtTest.Enable

Что гораздо эффективнее условной конструкции If ... Then ... EndIf

Вот ещё пример с циклом:
Код

#!/usr/bin/perl -w
use strict;
my $x = ""; # Начальное положение выключено

for (1..100) {
     print $x ? "Включил" : "Выключил", "\n";
     $x = !$x;
}

Что по сути равно следующему циклу на VB:
Код

For x = 1 To 100 Step 1
        txtTest.Enabled = Not txtTest.Enabled
        txtResult.Text = txtResult & txtTest.Enabled & vbCrLf
Next x


Это сообщение отредактировал(а) korob2001 - 14.9.2006, 02:54


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
alyam
Дата 14.9.2006, 07:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



собственно я хотел сделать так: при нажатии комбинации клавиш процедура становится неактивна, при повторном нажатии - активна.
с глобальной переменной логической можно конечно, но может можно решить вопрос сэкономив память? можно ли в Perl сделать как на VB txtTest.Enable = Not txtTest.Enable было бы гораздо эффектней )
PM MAIL   Вверх
BlackLFL
Дата 14.9.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 8
Всего: 12



для чего это нужно?

Это сообщение отредактировал(а) BlackLFL - 14.9.2006, 13:26
PM WWW   Вверх
alyam
Дата 14.9.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



что за вопрос для чего и почему? если бы не надо было не просил. если знаешь как сдлелать подскажи
PM MAIL   Вверх
BlackLFL
Дата 14.9.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 8
Всего: 12



Цитата(alyam @  14.9.2006,  15:09 Найти цитируемый пост)
что за вопрос для чего и почему? если бы не надо было не просил. если знаешь как сдлелать подскажи 

соблюдайте правила этикета, пожалуйста.

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

PM WWW   Вверх
DiverD
Дата 14.9.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 14.9.2005
Где: Белорусь

Репутация: 1
Всего: 2



2alyam 
тебе короб все написал!!!
--------------------
[ FreeBSD & pERL p0WER eVERY dAY ]
PM MAIL   Вверх
alyam
Дата 14.9.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 2.8.2006

Репутация: нет
Всего: нет



ну у него вариант с переменной. мне бы с функцией )
PM MAIL   Вверх
nitr
Дата 14.9.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



alyam, тебе 3 идеи подали, развивай ;)
моя не без смысла, короб интересно предложил smile хоть и с переменной... переложи на мою идею реализацию короба и всё ОК ;)

Это сообщение отредактировал(а) nitr - 14.9.2006, 17:13


--------------------
PM   Вверх
korob2001
Дата 15.9.2006, 04:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Цитата(alyam @  14.9.2006,  13:25 Найти цитируемый пост)

ну у него вариант с переменной. мне бы с функцией

smile Enable это свойство, а не функция.

Вот простой пример класса на Perl, со свойством Enable:
Код

package MyClass;

# Конструктор класса
sub new {
    my $check = shift;
    my $class = ref($check) || $check;
    my $self  = {
       Enable => "", # Вот это наше свойство
    };
    return bless($self, $class);
}

1;

Напомню, что в Perl 0, пустая строка "", строка "0", а так же undef, является False. Всё остальное - это True.

Сохрани  код приведённый выше в файле с именем MyClass.pm

Теперь напишем код, который будет использовать наш класс и свойство Enable.
Код

#!/usr/bin/perl -w
use strict;
use MyClass;   # Подключили класс

# Создали объект нашего класса
my $myObj = new MyClass();

# Выводим 100 раз значение свойства Enable
# и на каждой итерации обращаем его.
for (1..100) {
     print $myObj->{Enable} . "\n";
     $myObj->{Enable} = not $myObj->{Enable};
}

Теперь напишем аналог этой же программы на VisualBasic.
1. Создай новый проект Standard EXE.

2. Измени свойства формы в окне Properties, на следующие:
     (Name) = frmTest
     BorderStyle = 1-FixedSingle
     Caption = Test
     StartUpPosition = 2-CenterScreen

3. Добавь к форме TextBox, растяни его так, что бы он был на всю высоту формы, и на половину ширины формы, затем установи ему следующие свойства:
     (Name) = txtRes
     MultiLine = True
     ScrollBars = 2-Vertical
     Text = ""  (Пустая строка, т.е. удали всё что там будет по умолчанию)

4. Добавь к форме три CommadButton, расположи их на свободном месте формы и установи им следующие свойства
     Кнопка 1:
          (Name) = cmdStart
          Caption = Start
     Кнопка 2:
          (Name) = cmdErase
          Caption = Erase
     Кнопка 3:
          (Name) = cmdExit
          Caption = Exit
5. Добавь к проекту модуль класса, жми: Project -> Add Class Module

6. Выдели, только что добавленный класс, в окне Project и установи следующее свойство:
     (Name) = MyClass

7. В окне Project жми 2 раза на только что созданный класс, что бы открылось окно ввода кода, для этого класса и напиши там следующий код:
Код

Public Enable As Boolean

Это собственно и есть наше свойство класса, или поле, или член, как тебе удобнее так можешь его и называть.

8. Теперь выдели нашу форму frmTest в окне Project, затем жми кнопку View code и напиши там следующий код:
Код

Option Explicit

' Объявляем переменную типа нашего класса
Dim myObj As MyClass

Private Sub cmdErase_Click()
    ' Очищаем поле txtRes
    txtRes.Text = ""
End Sub

Private Sub cmdExit_Click()
    ' Уничтожаем объект нашего класса
    Set myObj = Nothing
    ' Выгружаем сами себя из памяти
    Unload Me
End Sub

' Содержимое этого обработчика я описывал выше
Private Sub cmdStart_Click()
    Dim x As Integer
    For x = 1 To 100
        txtRes.Text = txtRes.Text & myObj.Enable & vbCrLf
        myObj.Enable = Not myObj.Enable
    Next x
End Sub

Private Sub Form_Load()
    ' Создаём объкт нашего класса
    Set myObj = New MyClass
End Sub

Теперь сохрани проект File -> Save Project As и скомпилируй File -> Make Project1.exe
Если тебе лень всё это делать, то внизу этого поста я прицепил архив, со всей этой бодягой, там же и уже скомпиленый EXE.  smile

ЗЫ: Если тебе так уж хочется заюзать функции а не переменные, то оберни эти переменные в них. Например:
Код

my $enable = "";  # ложь

sub change {
       my $enable = shift;
       return !$enable;
}

for (1..100) {
       print "$enable\n";
       $enable = change($enable);
}


Это сообщение отредактировал(а) korob2001 - 15.9.2006, 14:24

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  arhive.zip 6,62 Kb


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.