Форум: "Основная";
Текущий архив: 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.039 c