Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Procedure, Обращение в другой Unit 
:(
    Опции темы
ivan219
Дата 19.1.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Имеем:
Код основной прораммы.
Код

unit Unit1;
.
.
.
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
EditKey(TEdit(Sender).Text,Key);
end;


Код дополнителного Unit.
Код

unit ProFun;
.
.
.
procedure EditKey(Text: String; var Key: Char);
begin
 case Key of
  '0'..'9',#8:;
  ',','.':
   begin
    if Pos(DecimalSeparator,Text)>0 then Key := #0
    else Key := DecimalSeparator;
   end;
  else
   Key := #0;
  end;
end;


Вопрос: можно пропустить обращение к процедуре TForm1.EditKeyPress(Sender: TObject; var Key: Char); и напремую из Edit1->Событие-> EditKey(Text: String; var Key: Char); собственно минуя вот это путь.
Код

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
EditKey(TEdit(Sender).Text,Key);
end;


И как это организовать smile smile

PM MAIL ICQ   Вверх
Guedda
Дата 19.1.2006, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



А чем тебя так не устраивает?


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
ivan219
Дата 19.1.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Ну хоца знать, дальше продвигатся ведь это я сам дошол, теперь проще так как этих Edit у меня в проге целая куча и не надо писать лишнего кода.

Ну так как можно это реализовать smile
PM MAIL ICQ   Вверх
Poseidon
Дата 19.1.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(ivan219 @ 19.1.2006, 22:02 Найти цитируемый пост)
Вопрос: можно пропустить обращение к процедуре TForm1.EditKeyPress(Sender: TObject; var Key: Char); и напремую из Edit1->Событие-> EditKey(Text: String; var Key: Char); собственно минуя вот это путь
Нет! Для того, что бы запретить ввод некоторых символов (выполнить EditKey) в TEdit, нужно обработать событие OnKeyPress у него (можно конечно еще OnKeyDown, но это уже как вариант). Поэтому обрабатывать придется у каждого едита, если хочешь что бы у них всех был запрещен ввод.

Еще возможен вариант присваивания события EditKeyPress в OnKeyPress каждого едита в цикле при создании программы. Что-то вроде
Код
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i:=0 to ControlCount-1 do
  if controls[i] is TEdit then
  TEdit(controls[i]).OnKeyPress:= EditKeyPress;
end;




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Guedda
Дата 19.1.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Зачем тебе лишняя процедура?
Напиши в первом Edite:
Код

procedure TForm1.Edit1KeyPress(Sender : Tobject; Key : Char);
case Key of
  '0'..'9',#8:;
  ',','.':
   begin
    if Pos(DecimalSeparator,TEdit(Sender).Text)>0 then Key := #0
    else Key := DecimalSeparator;
   end;
  else
   Key := #0;
  end;
end;

А после этого всем Эдитам в свойствах постать OnKeyPress = Edit1KeyPress. Если ты откроешь всплывающее меню у этого свойства, ты там эту процедуру увидишь.

Это сообщение отредактировал(а) Guedda - 19.1.2006, 23:49


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Poseidon
Дата 19.1.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



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


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ivan219
Дата 20.1.2006, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Если есть готовый компонент то выложи [email protected]

А по теме я знаю что может для несколких Edit задать одну процедуру поэтому в моей проге и нет 1,2,3... я так и зделал.

А лишняя процедура в дополнительном Unit нужна для обращения других так как Form уменя 20 штук и вкаждой по 3-8 Edit поэтому я и заварил всю эту кашу чтоб упростить себе работу так как раньше когда я незнал я делал к каждому Edit свою процедуру в итоге лишнии строки кода а теперь легче вот я и решил может можно зделать ещё проще и обращатся на прямую к процедуре в доподнительном Unit но если нельзя то нельзя.

А вобще возможно такое чтоб контролу в разделе события пресвоить процедуру каторая находится в другом Unit smile
PM MAIL ICQ   Вверх
Poseidon
Дата 20.1.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(ivan219 @ 19.1.2006, 23:05 Найти цитируемый пост)

обращатся на прямую к процедуре в доподнительном Unit но если нельзя то нельзя
Кто говорил что нелзя?

Цитата(ivan219 @ 19.1.2006, 23:05 Найти цитируемый пост)

А вобще возможно такое чтоб контролу в разделе события пресвоить процедуру каторая находится в другом Unit
Можно! Припиши этот юнит в Uses и обращайся




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
AndreyANM
Дата 20.1.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Зачем самому писать компоненты. Я так думаю что в данной ситуации подойдет
компонент TMaskEdit (кажется так называется), входящий в поставку Delphi
В нем можно указать маску ввода и она будет отсеивать запрещенные символы.
PM MAIL   Вверх
Poseidon
Дата 20.1.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(AndreyANM @ 19.1.2006, 23:12 Найти цитируемый пост)

В нем можно указать маску ввода и она будет отсеивать запрещенные символы.
А как быть с сепаратором? Один то можно указать. Да еще ограничение, что его первым нельзя указывать. Да много еще чего, что не умеет TMaskEdit



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
ivan219
Дата 20.1.2006, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Не что не получается ошибки новерное я ещё не всё знаю но да ладно пока будет и этим результатом ползоватся всётаки результат на лицо smile то скажем на 4 Edit было поряжка 50 сторок а теперь всего 4 а если вязять общюю суму Edit а их гдето порядка 100 штук выходит 5000 строк было а стало гдето 500 экономия в 10 раз smile

Ладно всем спасибо smile

Poseidon жду компонет smile
PM MAIL ICQ   Вверх
Poseidon
Дата 20.1.2006, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Цитата(ivan219 @ 20.1.2006, 00:08 Найти цитируемый пост)

Требует NumEdit.pas
Требует NumEdit.dcu, я тебе его отправил. Смотри внимательнее. NumEdit.dcr тоже был отправлен. smile


PS. Компонент отправлял в личку, так давай и вопросы задавай в личку. Поверь, остальным не интересно smile Можешь в РМ, можешь в асю.

Это сообщение отредактировал(а) Poseidon - 20.1.2006, 01:25


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Bose
Дата 20.1.2006, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



Цитата(Poseidon @ 20.1.2006, 00:10 Найти цитируемый пост)

обращатся на прямую к процедуре в доподнительном Unit но если нельзя то нельзя

Кто говорил что нелзя?


Цитата(ivan219 @ 19.1.2006, 23:05 )

А вобще возможно такое чтоб контролу в разделе события пресвоить процедуру каторая находится в другом Unit

Можно! Припиши этот юнит в Uses и обращайся


Poseidon, Вы это лично проверяли? просто я когда-то тоже пытался сделать что-то подобное и у меня не получилось(подробностей уже не помню). но в общем. я делал так же как и ivan219, - писал один обработчик дял формы и присваивал его всем контролам.
PM MAIL WWW Skype   Вверх
Демо
Дата 20.1.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

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



>Bose

Надо не только модулю в список Uses добавить, но и в том модуле, где реализована процедура/функция добавить ее описание в модуль интерфеса:

Код


interface

  function MyFunc: String;

implementation

function MyFunc: String;
begin
  Result := 'String';
end;


Это сообщение отредактировал(а) Демо - 20.1.2006, 12:25


--------------------
    
PM MAIL ICQ Skype   Вверх
Alexeis
Дата 20.1.2006, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



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


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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