Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2009, 11:40   #11
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

Написал вот такой простой код для поиска двух форм в моем приложении
Цитата:
for i := 0 to application.ComponentCount-1 do
if (application.Components[i] is tform) then
for j:=0 to (application.Components[i] as tform).ComponentCount-1 do
if (application.Components[i].Components[j] is tstringgrid) then begin

if ((application.Components[i] as tform).Components[j] as tstringgrid).rowcount>10 then
if ((application.Components[i] as tform).Components[j] as tstringgrid).colcount>10 then begin
str_cut:=((application.Components[i] as tform).Components[j] as tstringgrid);
srti:=true;
end;

if ((application.Components[i] as tform).Components[j] as tstringgrid).colcount=5 then begin
stakan_str:=((application.Component s[i] as tform).Components[j] as tstringgrid);
stakan:=true;
end;

end;
Но дело в том что эта беда у мне обрабытывается под таймером с периодичностью 300 и есть подозрения что этот код ужасно грузит процессор , потому что после внедрения сего куска приложение начало подтупливать..Как мне сделать так что бы , КОГДА Я УЖЕ НАШЕЛ ЭТИ ФОРМы в следующий раз они не искались в таймере??
cowboy вне форума Ответить с цитированием
Старый 10.09.2009, 15:37   #12
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

запомни их в переменные и таскай всё время

Сначала найди и запомни (скажем в к и L), а потом напрямую
Код:
stakan_str:=((application.Component s[k] as tform).Components[L] as tstringgrid).cells[0,0];
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 10.09.2009, 16:05   #13
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

а если сделать stakan_str и str_cut глобальными? и в последстии делатьпроверку следующего вида

Цитата:
if str_cut=nil then
ТАкое будет работать?
cowboy вне форума Ответить с цитированием
Старый 10.09.2009, 16:19   #14
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

1. Если недавно программируете, то лучше перестройте логику программы, по себе знаю, что первые проги от этого у всех страдают.
Как вариант можно.
2.
Код:
if str_cut=nil then
Что такое str_cut? Если строка/число и т.п. то нет, а зачем это надо?

p.s. nil используется только для указателей (pointer), а не для строк, чисел и т.д. Если надо очистить строку, то пишем str_cut:='', проверяем соответственно if str_cut='' then
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 10.09.2009, 21:20   #15
cowboy
Форумчанин
 
Регистрация: 12.03.2009
Сообщений: 109
По умолчанию

2.
Код:
if str_cut=nil then
Что такое str_cut? [/QUOTE]
Это
Цитата:
((application.Components[i] as tform).Components[j] as tstringgrid);
..Я так слелал..Но все равно данные идут не так быстро как было раньше
cowboy вне форума Ответить с цитированием
Старый 10.09.2009, 22:06   #16
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Зачем столько сложностей? Автор просил перебрать в цикле формы формы, и изменить некоторые свойства. Вот код:

Код:
var I:Integer;
begin
for i := 1 to 5 do
(Application.findComponent('Form' + inttostr(i)) as TForm).Caption :='X'+IntToStr(I);
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 11.09.2009, 09:34   #17
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Форма не обязательно должна называться Form так что.. только по классу
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 11.09.2009, 10:39   #18
856100
Форумчанин
 
Регистрация: 12.08.2008
Сообщений: 135
По умолчанию

Автор сам писал:
Цитата:
В проекте существует много форм имеющих следующие имена: Form1, Form2, ... , FormN.
Будь проще, бери пример с одноклеточных
856100 вне форума Ответить с цитированием
Старый 11.09.2009, 12:14   #19
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Ну это пожалуй самый короткий код

Код:
uses .. grids;

var i,j:integer;
str:tstringgrid;
begin
str:=nil; //на всякий
for i:=0 to application.ComponentCount-1 do
for j:=0 to (application.Components[i] as tform).ComponentCount-1 do
  if ((application.Components[i] as tform).Components[j]) is tstringgrid then
    begin
    str:=((application.Components[i] as tform).Components[j]) as tstringgrid;
    end;
if s<>nil then memo1.Lines.Add(str.Cells[0,0]);
end;
РАБОТАЕТ ТОЛЬКО ЧТЕНИЕ!!!
[Ferox]
postal2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перебрать все числа из заданных цифр, чтобы цифры в числах не повторялись? TwiX Общие вопросы Delphi 7 17.08.2009 16:56
как перебрать все элементы на форме? Аlex Общие вопросы C/C++ 1 07.02.2009 03:46
перебрать все варианты перестановки строк sv_mix Помощь студентам 2 26.07.2008 17:48
Как использовать две формы в одном приложении SeRhy Общие вопросы Delphi 6 23.01.2008 21:42
Как программно перечислить все формы приложения? Avron Общие вопросы Delphi 5 07.09.2007 08:51