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

Вниз

ComponentCount в TEdit   Найти похожие ветки 

 
Toxa_ua ©   (2005-11-04 00:00) [0]

Вопрос следующий: У меня есть на форме 40 компонентов TEdit.
Как мне проверить пустые ли 20 из них, которые находятся например где-то в середине? Как мне узнать ComponentCount какого-то из TEdit"ов?


 
злобная танька   (2005-11-04 00:27) [1]

ComponentCount ето свойство какого-либо компонента говорящее о том скока компонентов находится внутри данного компонента (он для них является parent кажысь, родитель тоись).
Если у тебя много однотипных компонентов на форме то для того чтобы было удобней обрабатывать их в разных циклах можно:
1. прописать им всем что нибудь в свойстве Tag
2. создать массив етих компонентов в run-time и обращаться к ним через индекс
3. если они все называются Edit1 Edit2 и т.д. можно различать их по имени. вырезал последний символ и вот тебе вроде как индекс.


 
Toxa_ua ©   (2005-11-04 00:44) [2]

Вытекающий вопрос: Свойсто Tag тоже надо присваивать компонентам в цикле потому, что присваивать его группе из 20 Editov будет не рационально! -)


 
злобная танька   (2005-11-04 00:50) [3]


> Toxa_ua ©   (04.11.05 00:44) [2]

тады по именам их различай.
if components[i].name = "vasia1" then Halt;


 
(-|+)?[0-9]   (2005-11-04 00:51) [4]


> oxa_ua ©   (04.11.05 00:44) [2]
> Вытекающий вопрос: Свойсто Tag тоже надо присваивать компонентам
> в цикле потому, что присваивать его группе из 20 Editov
> будет не рационально! -)

А в чём проблема?


 
Toxa_ua ©   (2005-11-04 01:04) [5]

--злобная танька--
>тады по именам их различай.
>if components[i].name = "vasia1" then Halt;

А в цикле никак неззя? Например знако ComponentCount можношь ограничиться и не от 0 до -1 а например от 25 до 45 и не проверять лишние компоненты?

           --(-|+)?[0-9]--
А проблема в том что я не хочу одинаковые строчки писать по 30 раз. -)
Кода многовато будет.


 
злобная танька   (2005-11-04 01:12) [6]

for i := 0 to Componentcount-1 do
 if components[i] is TEdit then
   if StrToInt(Copy(components[i].Name, 6, Length(components[i].Name)-6)) in [25..45] then HALT;


 
Германн ©   (2005-11-04 01:12) [7]

Вопрос вообще "бестолковый" абсолютно.

>  20 из них, которые находятся например где-то в середине?

Пардон. В середине чего?


> Как мне узнать ComponentCount какого-то из TEdit"ов?

Первый раз слышу, чтоб у TEdit ComponentCount было бы отлично от нуля. Хотя, конечно, такое может быть. И даже наверно есть в RxLib, но тут имхо не об том речь.

2 злобная танька   (04.11.05 00:27) [1]

>  (он для них является parent кажысь, родитель тоись).

Ну вот чиста по справке, он всё-таки owner кажысь, собственник. :)


 
злобная танька   (2005-11-04 01:15) [8]


> for i := 0 to Componentcount-1 do
>  if components[i] is TEdit then
>    if StrToInt(Copy(components[i].Name, 5, Length(components[i].Name)-4)) in [25..45] then HALT;


 
злобная танька   (2005-11-04 01:23) [9]


> Германн ©   (04.11.05 01:12) [7]
> Ну вот чиста по справке, он всё-таки owner кажысь, собственник.
>  :)

а ну да...


 
Toxa_ua ©   (2005-11-04 01:50) [10]

ок. Спасибо завтра проверю че к чему ато меня этот компилятор злить начинает. -))


 
злобная танька   (2005-11-04 02:40) [11]

ыыы... меня прёт..
20 эдитов из середины!

procedure TForm1.Button1Click(Sender: TObject);
type
 TRec = record
   dist: integer;
   index: byte;
 end;
var
 formcenter: TPoint;
 nbest: byte;
 edits: TList;
 i, j, c, min, minj, max, maxj: integer;
 nearest: array of byte;
 dists: array of integer;
 tochange: boolean;

 function Dist(Edit: TEdit): integer;  //расстояние до центра формы
 var
   ec: TPoint;
 begin
   ec.X := Edit.Left + Edit.Width div 2;
   ec.Y := Edit.Top + Edit.Height div 2;
   Result := Round(Sqrt(Sqr(ec.X - formcenter.X) + Sqr(ec.Y - formcenter.Y)));
 end;

begin
 formCenter.X := Width div 2;
 formCenter.Y := Height div 2;
 nbest := 20;   //сколько эдитов "из середины" надо проверить

 edits := TList.Create;

 for i := 0 to ComponentCount-1 do
   if Components[i] is TEdit then
     edits.Add(Components[i]);

 SetLength(dists, edits.Count);
 SetLength(nearest, nbest);
 c := 0;

 for i := 0 to edits.Count-1 do
   Dists[i] := Dist(TEdit(edits[i]));

 for i := 0 to edits.Count-1 do
   if c < nbest then
   begin
     nearest[c] := i;
     inc(c);
   end
   else begin
     max := -1;
     tochange := false;
     for j := 0 to nbest-1 do
       if dists[i] < dists[nearest[j]] then
         if dists[nearest[j]] > max then
         begin
           max := dists[nearest[j]];
           maxj := j;
           tochange := true;
         end;

       if tochange then
         nearest[maxj] := i;
   end;

 for i := 0 to nbest-1 do
   if TEdit(edits[nearest[i]]).Text = "" then
     ShowMessage(TEdit(edits[nearest[i]]).Name + " пустой!");

 edits.Free;
end;



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

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

Наверх




Память: 0.5 MB
Время: 0.057 c
2-1131568136
serko
2005-11-09 23:28
2005.12.04
Расшаривание папки!


14-1131908927
Виталий11111
2005-11-13 22:08
2005.12.04
Модератор пидар!!!


2-1132149166
йцукен
2005-11-16 16:52
2005.12.04
TextWidth только для моноширинных шрифтов?


3-1129642686
alex_***
2005-10-18 17:38
2005.12.04
использовать набор из хр


4-1128330458
yura_moz
2005-10-03 13:07
2005.12.04
usb devices