|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Фокусировка на пустых Edit'ах
Написал инструкцию типа
Код:
begin if key=#13 then begin if length(edit1.text)=0 then edit1.setfocus else begin if length(edit2.text)=0 then edit2.setfocus else begin if length(edit3.text)=0 then edit3.setfocus else button2.setfocus; end; end; что хочу сделать: 1) засунуть данную инструкцию в модуль 2) расписать ее более красиво что получилось модуль: Код:
procedure setfocus_edits_button(edits_on_form:array of tedit; button_on_form:tbutton); var i:integer; status:bolean; begin status:=true; for i:=1 to hight(edits_on_form) do begin if length(edits_on_form[i].text)=0 then begin edits_on_form[i].setfocus; status:=false; continue end else status:=true; end; if status=true then button_on_form.setfocus; end; Код:
begin if key=#13 then setfocus_edits_button([edit1,edit2,edit3],button1); end; в итоге ошибки: в модуле компилятор не понимает Tedit и tbutton подскажите где ошибки, может можно как то более рационально прописать инструкции: что должно получиться 1) инструкция должна быть прописана в модуле 2) она должна проверять пустые edit'ы и на них фокусироваться пока е заполнит оператор, в случае если они заполнены фокусируется на след объекте - кнопка например спасибо)) Последний раз редактировалось Bargest, 02.09.2012 в 13:39. |
#2
|
||||
|
||||
Код:
unit emptyFoc; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; procedure focusEdit(component:TComponent); implementation procedure focusEdit(component:TComponent); var i:Integer; begin for i:=0 to component.ComponentCount-1 do begin if component.Components[i].ClassType=TEdit then begin if Length((component.Components[i] as TEdit).Text)=0 then begin (component.Components[i] as TEdit).SetFocus; exit; end; end; end; end; end. Код:
Application.ProcessMessages |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Pavel_Aleksandrovich (03.09.2012)
|
#3
|
||||
|
||||
Цитата:
Application.HandleMessages. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Pavel_Aleksandrovich (03.09.2012)
|
#4
|
|||
|
|||
Цитата:
а тип tcomponent зарезервирован в delphi? или его надо объявлять? |
#5
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Pavel_Aleksandrovich (03.09.2012)
|
#6
|
||||
|
||||
Лучше сделать так:
Код:
function focusEdit(component:TComponent):boolean; var i:Integer; begin for i:=0 to component.ComponentCount-1 do begin if component.Components[i].ClassType=TEdit then begin if Length((component.Components[i] as TEdit).Text)=0 then begin (component.Components[i] as TEdit).SetFocus; result:=true; exit; end; end; end; for i:=0 to component.ComponentCount-1 do if focusEdit(component.Components[i]) then begin result:=true; exit; end; result:=false; end; так будет искать по всех контролах на форме (панелях и тп). Лучше сделать так: Выбрать все TEdit (с помощью клавиши SHIFT), и задать им один обработчик OnKeyDown на всех: Код:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=vk_Return then focusEdit(Form1); end; |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
Pavel_Aleksandrovich (03.09.2012)
|
#7
|
|||
|
|||
Подскажите где ошибка?
Код:
procedure Form4.FormCreate(Sender: TObject); begin label1.Caption:='Исходные данные:'+#13+'Университет:'+#32+ Unit1.Form1.RadioButton1.Caption+#13+'Фамилия:'+#32+ Unit2.Form2.Edit1.Text+#13+'имя:'+#32+Unit2.Form2.Edit2.Text+ #13+'отчество:'+#32+Unit2.Form2.Edit3.Text; end; Почему то Label не отобажает ни один Edit.Text может быть причина в том что я ни в одной форме не определяю переменные, и не присваиваю им значения edit.text Подскажите в чем нюанс? Последний раз редактировалось Pavel_Aleksandrovich, 03.09.2012 в 22:32. |
#8
|
||||
|
||||
Попробуй перенести из OnCreate в OnShow. При создании данной формы, остальные могли не успеть проинициализироваться.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Pavel_Aleksandrovich (04.09.2012)
|
#9
|
|||
|
|||
Цитата:
точно сработало |