Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.02;
Скачать: CL | DM;

Вниз

Как перебрать все объекты типа TEdit на форме??   Найти похожие ветки 

 
Lamer666   (2007-11-06 21:52) [0]

Подскажите пожалуйста Как перебрать все объекты типа TEdit на форме??
Спасибо!


 
Dib@zol ©   (2007-11-06 22:13) [1]

procedure TForm1.FormCreate(Sender: TObject);
const
 s = 255;
var
 i : Cardinal;
 P : PChar;
begin
 for i:=0 to ComponentCount-1 do begin
   GetMem(P, s);
   try
     GetClassName((Components[i] as TWinControl).Handle, P, s);
     ShowMessage(P);
     // ...
     // Тут проверяешь на принадлежность класса к TEdit и делаешь что нужно
     // ...
     FreeMem(P, s);
   except end;
 end;
end;


 
palva ©   (2007-11-06 22:17) [2]

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
for i:=0 to ComponentCount - 1 do
 if Components[i].ClassName = "TEdit" then
   ShowMessage((Components[i] As TEdit).Text);
end;


 
DrPass ©   (2007-11-06 22:18) [3]


>  for i:=0 to ComponentCount-1 do begin
>    GetMem(P, s);
>    try
>      GetClassName((Components[i] as TWinControl).Handle,
>  P, s);
>      ShowMessage(P);
>      // ...
>      // Тут проверяешь на принадлежность класса к TEdit
> и делаешь что нужно
>      // ...
>      FreeMem(P, s);
>    except end;
>  end;

Шо за бред?

for i:=0 to ComponentCount-1 do
  if Components[i] is TEdit then ...

и все


 
Kolan ©   (2007-11-06 22:27) [4]

> Dib@zol ©   (06.11.07 22:13)

Прикрати маятся. ПЕши хоть на ассемблере в соотв ветке, не трож начинающих. :(


 
Riply ©   (2007-11-06 23:53) [5]

procedure EnumEditRec(const aComp: TComponent);
var
EnumComp: TComponent;
begin
for EnumComp in aComp do
 if EnumComp is TEdit then ShowMessage(EnumComp.Name) else
  if EnumComp is TFrame then EnumEditRec(EnumComp);
end;


 
Tmp   (2007-11-07 00:12) [6]

Riply ©   (06.11.07 23:53) [5]

Цэ шо? :)


 
Riply ©   (2007-11-07 00:17) [7]

> [6] Tmp   (07.11.07 00:12)
> Цэ шо? :)

Эта... рекурсивная перебора эдитов однако. :)


 
Tmp   (2007-11-07 00:28) [8]


> Riply ©   (07.11.07 00:17) [7]

Ээээ.... Нэ работает :(
:)


 
Riply ©   (2007-11-07 00:32) [9]

Как вызываешь ?
procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
EnumEditRec(Self);
end;

Может у тебя на форме Edit`ов нет ? :)


 
guav ©   (2007-11-07 00:35) [10]

> [9] Riply ©   (07.11.07 00:32)


> Может у тебя на форме Edit`ов нет ? :)

скорее нету фор ич в компиляторе :)


 
Riply ©   (2007-11-07 00:42) [11]

> [10] guav ©   (07.11.07 00:35)

Привет !

> скорее нету фор ич в компиляторе :)
Ну так заменить тогда на for i := 0 to

P.S.
> [10] guav
По Вашему заданию сижу и собираю нестандартные случаи :)


 
DrPass ©   (2007-11-07 00:43) [12]


> Riply ©   (06.11.07 23:53) [5]

У парня ж Delphi 7. Не издевайся над человеком


 
Riply ©   (2007-11-07 00:45) [13]

> [12] DrPass ©   (07.11.07 00:43)
> У парня ж Delphi 7. Не издевайся над человеком

Sorry... Не знала...

Надо заменить
for EnumComp in aComp do
на
for i:=0 to ComponentCount-1 do


 
guav ©   (2007-11-07 00:51) [14]

<off>
> Riply ©

ICQ включить можешь ?
</off>


 
Riply ©   (2007-11-07 00:56) [15]

> [14] guav ©   (07.11.07 00:51)
<off>
> Riply ©
>ICQ включить можешь ?
Сейчас нет. :(
У меня многое "похоронено" под Убунтей :)
Я вхожу с др. компьютера.
</off>


 
Tmp   (2007-11-07 01:16) [16]


> Riply ©   (07.11.07 00:32) [9]
> Как вызываешь ?

Если это вопрос мне(что скорее всего) то:
Я никак ее не вызывал, просто посмотрел на "написание" кода и сделал вывод о не работоспособности этого кода в D7
;)


 
Германн ©   (2007-11-07 01:34) [17]


> Riply ©   (06.11.07 23:53) [5]

Когда ты задаёшь свои весьма "продвинутые" вопросы в этой конференции это я понимаю. Но ответы всё же в ней должны быть более простыми или хотя бы должны сопровождаться объяснениями :-)


 
Riply ©   (2007-11-07 07:06) [18]

>[17] Германн ©   (07.11.07 01:34)
> Но ответы всё же в ней должны быть более простыми или хотя бы должны сопровождаться объяснениями :-)
Ну вот. Все на меня бедную напали. И ты, Брут. Тьфу - Сергей. :)
За то, что я не учла, что у автора Delphi 7, я уже принесла извинения.
А какие пояснения нужны к этой процедуре, я до сих пор не вижу.
Или надо было нашпиговать три строчки кода фразами типа:
"перебираем компоненты", "проверяем не Edit-ли(не Frame- ли)", "выводим сообщение" ?
:)


 
Lamer666   (2007-11-07 13:46) [19]

Большое спасибо:Dib@zol,palva,DrPass,Kolan,Riply,Tmp,guav,Германн.
С уваженеим Lamer666
ДА и еще хотел спросить, а если нужно обратиться к какому-нибудь свойству поля TEDIT, например MaxLength, в этом переборе?


 
Reindeer Moss Eater ©   (2007-11-07 13:51) [20]

при поиске эдита лучше перебирать не компоненты а контролы


 
Ega23 ©   (2007-11-07 13:53) [21]


> при поиске эдита лучше перебирать не компоненты а контролы


Тогда рекурсивная переборка всех контролов, ибо Edit может и на панели лежать, а панель уже на форме.


 
Lamer666   (2007-11-07 13:57) [22]


> при поиске эдита лучше перебирать не компоненты а контролы

а как присвоить значение в свойство MaxLength? Его нет в списке свойств "контролов"


 
Lamer666   (2007-11-07 13:59) [23]


> Тогда рекурсивная переборка всех контролов, ибо Edit может
> и на панели лежать, а панель уже на форме.

Есть и такое! : ((


 
Anatoly Podgoretsky ©   (2007-11-07 14:04) [24]

> Ega23  (07.11.2007 13:53:21)  [21]

Но тоже относится и к Components


 
Reindeer Moss Eater ©   (2007-11-07 14:04) [25]

а как присвоить значение в свойство MaxLength?

Привести найденный контрол к типу TEdit


 
Lamer666   (2007-11-07 14:44) [26]


> Привести найденный контрол к типу TEdit

: ))
Протите, а как?
Controls[i].ClassType:=TEdit;
ругаеться! : (


 
Reindeer Moss Eater ©   (2007-11-07 14:49) [27]

Ругается потому что это не приведение, а присвоение.
Я тебе про приведение говорил.


 
Skyle ©   (2007-11-07 14:50) [28]


> Lamer666   (07.11.07 14:44) [26]
>
> > Привести найденный контрол к типу TEdit
>
> : ))
> Протите, а как?
> Controls[i].ClassType:=TEdit;
> ругаеться! : (


(Controls[I] as TEdit).MaxLength


 
Lamer666   (2007-11-07 14:51) [29]


> Reindeer Moss Eater ©   (07.11.07 14:49) [27]



> Skyle ©   (07.11.07 14:50) [28]


Ясно, теперь буд знать! Спасибо!


 
Ega23 ©   (2007-11-07 14:53) [30]


> (Controls[I] as TEdit).MaxLength


Если более правильно, то
if (Controls[i] is TEdit) then
 TEdit(Controls[i]).MaxLength ....


 
Kolan ©   (2007-11-07 14:54) [31]

> Ясно, теперь буд знать! Спасибо!

На 95 процентов я уверен что тебе ненадо проходится по всем контролам&#133
Опеши задачу, мож наталкнём тебя на здравую мысль&#133


 
Lamer666   (2007-11-07 14:55) [32]


> Ega23 ©   (07.11.07 14:53) [30]

: ))) Спасиб!


 
Skyle ©   (2007-11-07 14:55) [33]


> Ega23 ©   (07.11.07 14:53) [30]

Я так понял на тему if Controls[I] is TEdit говорили первые 25 постов, поэтому и не указал...


 
Lamer666   (2007-11-07 15:02) [34]


> На 95 процентов я уверен что тебе ненадо проходится по всем
> контролам…
> Опеши задачу, мож наталкнём тебя на здравую мысль…

В общем задача такая:
1. На форме есть TEDIT-ы, на форме есть TabSheet-ы на них тоже есть TEDIT-ы.
2. Есть таблица в базе данных на MSSQL сервере, некоторые поля таблицы имеют ограницения, например 12 символов
Ну в общем что бы при выполнении хранимой процедуры не проверять длинну введенного в каждом поле значения, я просто хочу ограничить поля на длинну ввода! Вот!


 
Ega23 ©   (2007-11-07 15:04) [35]


> Есть таблица в базе данных на MSSQL сервере, некоторые поля
> таблицы имеют ограницения, например 12 символов


Тип полей char(12) или varchar(12)?


 
Lamer666   (2007-11-07 15:09) [36]

varchar(12)


 
Kolan ©   (2007-11-07 15:17) [37]

> На форме есть TEDIT-ы,


> некоторые поля таблицы имеют ограницения

Сколько же у тебя этих эдитов?


 
Ega23 ©   (2007-11-07 15:20) [38]

Хотя без разницы. Сервер автоматом обрежет


 
Ega23 ©   (2007-11-07 15:21) [39]


> varchar(12)


Забей болт.


 
Kolan ©   (2007-11-07 15:23) [40]

> Забей болт.

Ну ты сказал&#133 Люди будут пол дня вводить ничего не подозревая, а сервер будет все резать&#133


 
Ega23 ©   (2007-11-07 15:25) [41]


> Ну ты сказал… Люди будут пол дня вводить ничего не подозревая,
>  а сервер будет все резать…


А нефиг такое ограничение вводить.
Если честно, то я вообще не понимаю, зачем для varchar такие ограничения. Ну ставь varchar(255), какие проблемы?
Это же нуль-терминированная строка, реальной памяти отводится, вроде 4 байта, а остальное в куче сервера.


 
Kolan ©   (2007-11-07 15:32) [42]

> зачем для varchar такие ограничения

Я тут спорить не буду, так как не компетентен, но знаю что забить &#151; оч. опасно&#133


 
Ega23 ©   (2007-11-07 15:36) [43]


> но знаю что забить — оч. опасно…


Не опасно.
Впрочем, мне непонятны метания автора. Как он будет отличать нужный ему Edit от других? Или у него все такие, с ограничением на 12 символов?
Ведь проще нужным поставить сразу, и всё...


 
Sonia ©   (2007-11-07 15:41) [44]


> Есть таблица в базе данных на MSSQL сервере, некоторые поля
> таблицы имеют ограницения, например 12 символов

А почему тогда не использовать DBEdit и в те поля, у которых ограничение, компонент не даст ввести больше?


 
Anatoly Podgoretsky ©   (2007-11-07 15:46) [45]

> Ega23  (07.11.2007 15:36:43)  [43]

Автору охота потрахаться или он не умеет работаь с Инспектором объектов


 
Sonia ©   (2007-11-07 15:52) [46]


> Автору охота потрахаться или он не умеет работаь с Инспектором
> объектов

Скорее всего второе :)


 
Amoeba ©   (2007-11-07 16:06) [47]


> Автору охота потрахаться или он не умеет работаь с Инспектором
> объектов

Возможно, что всё вместе.


 
Anatoly Podgoretsky ©   (2007-11-07 16:13) [48]

> Amoeba  (07.11.2007 16:06:47)  [47]

Учитывая ник возможно и больше.


 
Lamer666   (2007-11-07 20:35) [49]


> А почему тогда не использовать DBEdit и в те поля, у которых
> ограничение, компонент не даст ввести больше?

Да же если и ИСПОЛЬЗОВАТЬ DBEdit, данные я загоняю черех ХРАНИМЫЕ процедуры, а не через Query!


> Не опасно.
> Впрочем, мне непонятны метания автора. Как он будет отличать
> нужный ему Edit от других? Или у него все такие, с ограничением
> на 12 символов?
> Ведь проще нужным поставить сразу, и всё...


Вот это я и реализовываю в ввиде функции (беру из SQL (syscolumns,....) данные о размераз полей которые нужно ограничить на ввод)

Можно было бы конечно дать и большие размеры, что ж я поделаю, если задача так поставленна!



Страницы: 1 2 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.024 c
2-1194237848
Masher
2007-11-05 07:44
2007.12.02
Консольный калькулятор


15-1193379486
bva
2007-10-26 10:18
2007.12.02
Создание инсталяции программы


15-1193596876
VladSn
2007-10-28 21:41
2007.12.02
кнопки в заголовке окна


11-1179159919
Даддитс
2007-05-14 20:25
2007.12.02
Снова KOLReport


15-1193945573
Ricks
2007-11-01 22:32
2007.12.02
В шоке от украинских новостей...