Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
14-1131523560
ASP_
2005-11-09 11:06
2005.12.04
DBF И Delphi


14-1131956291
Bogdan1024
2005-11-14 11:18
2005.12.04
Crystal Reports 10


14-1131954944
ZeroDivide
2005-11-14 10:55
2005.12.04
Накрылась винда. Посоветуйте, грохать или лечить?


14-1131956370
msguns
2005-11-14 11:19
2005.12.04
Вопрос фанам Starcraft


1-1131047685
rolex
2005-11-03 22:54
2005.12.04
Баг Chart а или что?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский