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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> заполнение полей Edit формы. Поиск пустого Edit 
:(
    Опции темы
RosemaN
Дата 18.11.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот наваял процедурку и функцию. Решил отказаться от первого варианта (записывать данные в буфер при изменении конкретного поля) и записывать в массив все данные одним махом. Написал процедуру для записи содержимого 20 Edit в массив из 20 ячеек. И функцию проверки поля на наличие в нем хоть чего-нибудь smile: . Хотелось бы узнать мнение форумчан. Просто такое чувство, что стреляю по воробьям из пушки, но ничего более простого придумать не смог. Может быть будут какие-нибудь рекомендации по увеличению быстродействия кода?
Код

procedure TForm1.DataInput;
var i: integer;
begin
  for i := 1 to 20 do
  with FindComponent(Format('edit%d',[i])) as TEdit do
    if Text<>'' then
    begin
      data[i]:=text;
      showmessage(text);
    end;
end;

function TForm1.CheckEdit: Boolean;
var i,count: Integer;
    s: String;
begin
  for i := 1 to 20 do
  with FindComponent(Format('edit%d',[i])) as TEdit do
    if Text='' then
    begin
      result := False;
      count := i;
      break;
    end
    else result := true;
  with FindComponent(Format('label%d',[count])) as TLabel do
    ShowMessage(Caption);
end;


PM MAIL   Вверх
aktuba
Дата 19.11.2007, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Ты бы объяснил задачу - было бы проще... Зачем вообще постоянно сохранять данные в массив?


--------------------
user posted image
PM MAIL WWW Skype   Вверх
RosemaN
Дата 19.11.2007, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(aktuba @ 19.11.2007,  00:35)
Ты бы объяснил задачу - было бы проще... Зачем вообще постоянно сохранять данные в массив?

делаю программу для составления отчетов в Word и Excel. Запись данных в массив делаю при нажатии на кнопку "Создать акт" или "Сделать запись в журнал". Тем самым я ухожу от необходимости обрабатывать нажатия клавиш Ввода и Таб, а так же обрабатывать вставку данных из буфера обмена. Алгоритм такой: заполняются поля на форме, жмем на кнопку - на выходе отчет. Затем снова заполняем поля, жмем на кнопку - еще один отчет и т.д. Данные записываю а в массив и в дальнейшем работаю уже с массивом данных
PM MAIL   Вверх
Frees
Дата 19.11.2007, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(RosemaN @  19.11.2007,  00:51 Найти цитируемый пост)
Тем самым я ухожу от необходимости обрабатывать нажатия клавиш Ввода и Таб

а зачем их обрабатывать нужно?

Добавлено через 8 минут и 43 секунды
я может не верно понял твою зодачу но...
может так проще.
пишеш универсальный обработчик события OnChange
который определяет какой едит его вызвал и пишет в соответствуещее значение в массив, определяет все ли едиты заполнены если не все не дает нажать кнопку..




--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
lukas
Дата 19.11.2007, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ХМ... задача все равно не ясна... до конца...

можно конешно вместо массива использовать TStringList... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
RosemaN
Дата 19.11.2007, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Frees @ 19.11.2007,  08:27)
Цитата(RosemaN @  19.11.2007,  00:51 Найти цитируемый пост)
Тем самым я ухожу от необходимости обрабатывать нажатия клавиш Ввода и Таб

а зачем их обрабатывать нужно?

Добавлено @ 08:36
я может не верно понял твою зодачу но...
может так проще.
пишеш универсальный обработчик события OnChange
который определяет какой едит его вызвал и пишет в соответствуещее значение в массив, определяет все ли едиты заполнены если не все не дает нажать кнопку..

пример можно?
PM MAIL   Вверх
lukas
Дата 19.11.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



RosemaN, 

Код

// обработчик OnChage
...
begin
  ShowMessage(TEdit(Sender).Name);
end;



--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
RosemaN
Дата 22.11.2007, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



перед заполнением отчетов в Excel и Word необходимо заполнить ВСЕ поля. Где сделать эту проверку? В обработчике кнопок создания отчетов вроде логично, но куда передавать управление, если не все поля заполнены? Какие предложения?
PM MAIL   Вверх
aktuba
Дата 23.11.2007, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Первому не заполненному. Например так:
Код

for Idx := 0 to ComponentsCount -1 do
  if (Componens[Idx] is TEdit) and ((Components[Idx] as TEdit).Text = '') then
  begin
    (Components[Idx] as TEdit).SetFocus;
    Break;
  end;


Это сообщение отредактировал(а) aktuba - 23.11.2007, 02:03


--------------------
user posted image
PM MAIL WWW Skype   Вверх
pavelv
Дата 24.11.2007, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Насчет исходной проги согласен с Frees. Нужен универсальный обработчик событий на OnChange, во-первых и код будет красивее и зазря все компоненты на форме не прийдется лопатить. По второму aktuba уже всё написал, даже добавить нечего. Разве, что во второй строке кода "Componens" заменить "Components" smile.
PM MAIL   Вверх
RosemaN
Дата 24.11.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(pavelv @ 24.11.2007,  14:30)
Насчет исходной проги согласен с Frees. Нужен универсальный обработчик событий на OnChange, во-первых и код будет красивее и зазря все компоненты на форме не прийдется лопатить. По второму aktuba уже всё написал, даже добавить нечего. Разве, что во второй строке кода "Componens" заменить "Components" smile.

OnChange на что реагирует? На изменение свойства Text?
независимо от того как данные туда попали?
PM MAIL   Вверх
RosemaN
Дата 24.11.2007, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вот такой код не очень подходит, ибо если с клавиатуры вводить текст, то OnChange реагирует на каждый воодимый символ. На Ctrl+V срабатывает прекрасно. Видимо, тут еще нужно задействовать потерю фокуса. Чтобы данные в массив записывались только после завершения ввода строки символов. (привязка конкретного эдита к соотв элементу массива через свойство Tag)
Код

procedure TForm1.Edit1Change(Sender: TObject);
begin
  data[(Sender as TEdit).Tag]:=(Sender as TEdit).Text;
  ShowMessage(data[(Sender as TEdit).Tag]);
end;


Это сообщение отредактировал(а) RosemaN - 24.11.2007, 18:12
PM MAIL   Вверх
aktuba
Дата 24.11.2007, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



Цитата(pavelv @  24.11.2007,  15:30 Найти цитируемый пост)
Разве, что во второй строке кода "Componens" заменить "Components" smile. 

Виноват =))). Набирал в браузере.

Цитата(RosemaN @  24.11.2007,  18:03 Найти цитируемый пост)
OnChange на что реагирует?

На изменение содержимого.

Цитата(RosemaN @  24.11.2007,  18:03 Найти цитируемый пост)
независимо от того как данные туда попали? 

Независимо.
Цитата(RosemaN @  24.11.2007,  19:01 Найти цитируемый пост)
вот такой код не очень подходит, ибо если с клавиатуры вводить текст, то OnChange реагирует на каждый воодимый символ. На Ctrl+V срабатывает прекрасно. Видимо, тут еще нужно задействовать потерю фокуса. Чтобы данные в массив записывались только после завершения ввода строки символов. (привязка конкретного эдита к соотв элементу массива через свойство Tag)
Код

procedure TForm1.Edit1Change(Sender: TObject);
begin
  data[(Sender as TEdit).Tag]:=(Sender as TEdit).Text;
  ShowMessage(data[(Sender as TEdit).Tag]);
end;


Не понятны 2 вещи:
1. Зачем записывать данные в массив??? Они и так уже есть, при обработке бери непосредственно из TEdit-ов.
2. Чем именно не подошел данный код? Тебе ведь только надо проверить, пустой Edit или нет, например так:
Код

Button1.Enabled := Button1.Enabled and ((Sender as TEdit).Text <> '');



--------------------
user posted image
PM MAIL WWW Skype   Вверх
RosemaN
Дата 24.11.2007, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(aktuba @ 24.11.2007,  18:21)
2. Чем именно не подошел данный код? Тебе ведь только надо проверить, пустой Edit или нет

Проверку заполнения Эдита уже сделал  smile  Это другая процедура - ввода данных.  smile 
Данные записываю в массив т.к. у меня создаются три разных отчета и требуется некотрое изменение строк. Хотя можно в принципе и без них. Поудобнее как-то 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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