Показать полную графическую версию : MainMenu и выход из программы
novashdima
11-02-2013, 01:16
Он лучше в том случае, когда надо найти один компонент. Если же нужно найти сразу группу компонентов, лучше сразу попробовать сделать это в одном цикле и тут же присвоить значения ссылок на эти компоненты соответствующим переменным. »
А что мешает сделать типа такого?
for i := 1 to Count do
begin
S:='Name'+IntToStr(I+1);
with FindComponent(S) do Caption := 'BlaBlaBla...';
end
novashdima
11-02-2013, 05:45
Ну что же, весь код я пересмотрел и переделал, в результате главный исходник уменьшился с 2900 строк кода до 1700, что не может не радовать. Также введя такую обработку я избавился от головняка в плане сохранения настроек в файл, за что огромное спасибо. Однако остается открытым два вопроса, каким образом можно объединить такие процедуры:
procedure TMainForm.EnergyInfo(Sender: TObject);
begin
if EnergyLevel.Value <> 0
then begin
Clipboard.Clear;
Clipboard.SetTextBuf(PChar(EnergyLabel.Caption + ' ' + EnergyLevel.Text +
' уровень. Время исследования: ' + EnergyTime.Caption + '. Стоимость: ' +
EnergyResource.Caption + '.'));
end;
end;
procedure TMainForm.LaserInfo(Sender: TObject);
begin
if LaserLevel.Value <> 0
then begin
Clipboard.Clear;
Clipboard.SetTextBuf(PChar(LaserLabel.Caption + ' ' + LaserLevel.Text +
' уровень. Время исследования: ' + LaserTime.Caption + '. Стоимость: ' +
LaserResource.Caption + '.'));
end;
end;
И так далее. Весь вопрос в том, как бы перебрать все эти компоненты, учитывая, что название компонентов разной длины, единственное, что везде одинаково это окончание названия компонента ~Label/~Level/~Time. Используя всякие AnsiIndexStr/AnsiPos/Copy/Delete/Insert и т.д. из модуля StrUtils я намучаюсь так, что брошу это дело...
novashdima, желательно под каждый новый вопрос, не имеющий непосредственного отношения к названию этой темы, заводить новую.
Любезный
11-02-2013, 11:19
А что мешает сделать типа такого? »
FindComponent - это такой же цикл. По сути дела, это выполнение одной и той же работы по нескольку раз. В случае очень многократного применения могут быть проблемы с производительностью.
novashdima
11-02-2013, 15:20
novashdima, желательно под каждый новый вопрос, не имеющий непосредственного отношения к названию этой темы, заводить новую. »
Понимаю, но имхо лучше все вопросы обсудить и закрыть тему, а не создавать кучу тем(в данном случае мне пришлось бы создавать темы для: сжатия 7zip, поиск компонента, загрузка из ини, сохранение в файл, суть этой темы), вышло бы тем 10.
FindComponent - это такой же цикл. По сути дела, это выполнение одной и той же работы по нескольку раз. В случае очень многократного применения могут быть проблемы с производительностью. »
Понятно, тогда подскажите, как найти оптимально 3 раза по 3 компонента, не перебирая все компоненты 9 раз. Как проверить, все ли компоненты найдены и как узнать, что я все нужные компоненты нашел и выйти из цикла. Ничего простого не приходит в голову, только флаг для проверки найденных всех компонентов, при нахождении компонента сразу же присваивать его переменной...
И подскажите по поводу остальных вопросов.
upd
Создал темы под каждый вопрос.
Понимаю, но имхо лучше все вопросы обсудить и закрыть тему, а не создавать кучу тем »
Имхо у нас у каждого своё, но есть Общие правила конференции OSZone.net (http://forum.oszone.net/rules.html), п.3.12. Лучше всего руководствоваться правилом — «Один вопрос — одна тема». И Вам легче, и отвечающим удобнее.
Любезный
11-02-2013, 17:49
Понятно, тогда подскажите, как найти оптимально 3 раза по 3 компонента, не перебирая все компоненты 9 раз. Как проверить, все ли компоненты найдены и как узнать, что я все нужные компоненты нашел и выйти из цикла. Ничего простого не приходит в голову, только флаг для проверки найденных всех компонентов, при нахождении компонента сразу же присваивать его переменной... »
На первый взгляд - три цикла. Конкретно каким образом - зависит от задачи.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.