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

Вниз

Компонент в цикле   Найти похожие ветки 

 
Oleg1963 ©   (2009-11-11 14:05) [0]

Здравствуйте уважаемые коллеги. Я недавно практически столкнулся с Дельфи и тут возник вопрос:
В форме много кнопок, выполняющих однородные команды а также полей ввода. К примеру  
                    Bitbtn2.Visible:=False;
                    Edit2.Text:=FieldByName("NetPath").AsString.
Выполнить восемь раз.
Нельзя ли (копчиком чувствую что можно) привести указанный фрагмент
к виду:
            for N=1 to n do
                begin
                    Bitbtn[N].Visible:=False;
                    Edit[N].Text:=FieldByName("NetPath").AsString;
                end;
А то действий с гулькин хрен, а текста....
Как я потом это сено разбирать буду? -(((
Заранее благодарен.


 
Dennis I. Komarov ©   (2009-11-11 14:10) [1]

Можно и к такому: array of TAnyObject


 
Kolan ©   (2009-11-11 14:17) [2]

Если компоненты вроде Edit2 создаются не динамически, то я бы сделал загрузку в них строк руками. Другое дело, что может столько кнопок не нужно.

Если таки хочется автоматически, то см. совет Дениса.


 
Dennis I. Komarov ©   (2009-11-11 14:22) [3]


> Если компоненты вроде Edit2 создаются не динамически

О чем Вы говорите, если же нарисовано Edit2 - какой тут runtime...

З.Ы. Я просто ответил на конкретный заданный вопрос.


 
Игорь Шевченко ©   (2009-11-11 14:24) [4]

RTFM: FindComponent


 
Kolan ©   (2009-11-11 14:28) [5]

Денис, я не четко выразил мысль. Раз человеку хочется автоматом заполнять поля, то, возможно их лучше и создавать динамически.

А вот если их набор всегда один и тот же и каждое поле имеет (должно иметь в данном случае) осмысленное имя, то я за ручное заполнение.

NetPathEdit.Text:=FieldByName("NetPath").AsString.


 
Oleg1963 ©   (2009-11-11 14:56) [6]

Спасибо всем за дружеские советы!

Задача сама по себе выеденного яйца не стоит. Нужно указать восемь сетевых адресов с базами данных и скопировать их в указанный каталог.

Дифференциал кривизны прямого угла под стопочку! :-))))

Задача для первого курса ПТУ. Я на Паскаль 7.0 эту задачу за два часа нацарапаю. Другое дело, что по ходу написания я изучаю Дельфина, а за это мне платят. Просто мне хотелось добиться вида типа Строка_с_именем_компа, кнопочка, выбор пути в OpenDialog и пальцы веером.
А так... AdoConnect,ADOTABLE и DBGrid+пригоршня мелкой чепухи.

Всем СПАСИБО! Вопрос закрыт.


 
Kolan ©   (2009-11-11 15:00) [7]


> Просто мне хотелось добиться вида типа Строка_с_именем_компа,
>  кнопочка, выбор пути в OpenDialog и пальцы веером.


Не понятно что из этого не получилось.


 
Oleg1963 ©   (2009-11-11 15:09) [8]

Bitbtn2.Glyph.TransparentColor:=clGrayText;

        Edit2.Text:=FieldByName("Name").AsString;
         Edit21.Text:=FieldByName("NetPath").AsString;
        Next;
{----------------------------------------------- }
procedure TForm1.Edit21Change(Sender: TObject);
var S : String;
begin
    S:=Edit2.Text;
    ADOTable1.Locate("Name",S,[loCaseInsensitive]);
    ADOTable1.Edit;
    AdoTable1.FieldByName("NetPath").AsString:=Edit21.Text;
    ADOTable1.Post;
end;
{-----------------------------------------------------------------}
procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
begin
  OpenDialog1.FileName:= Edit21.Text;
  OpenDialog1.Filter:="Test_2|Test_2.mdb";
  if not OpenDialog1.Execute then
                                 OpenDialog1.FileName:="Test_2.mdb";
  Edit21.Text:=OpenDialog1.FileName;
end;
========================================================

И ВСЕ вышеуказанное ВОСЕМЬ РАЗ!  Ррррррррррр....


 
Kolan ©   (2009-11-11 15:19) [9]

Олег, ваше желание не делать этого 8 раз совершенно верное.

Вам нужно просто разобраться с функциями и процедурами.

Такой код:
procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
begin
 OpenDialog1.FileName:= Edit21.Text;
 OpenDialog1.Filter:="Test_2|Test_2.mdb";
 if not OpenDialog1.Execute then
                                OpenDialog1.FileName:="Test_2.mdb";
 Edit21.Text:=OpenDialog1.FileName;
end;


Нужно превратить в подобный:

funtion TForm1.GetPath(AFileName: string): string;       {Участок № 2}
begin
 OpenDialog1.FileName:= AFileName;
 OpenDialog1.Filter:="Test_2|Test_2.mdb";
 if not OpenDialog1.Execute then
   OpenDialog1.FileName:="Test_2.mdb";
 Result := OpenDialog1.FileName;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
begin
 Edit21.Text := GetPath(Edit21.Text);
end;


Дальше сами...

Таким образом общие части будут вынесены и будут в программе только 1 раз, а конкретные параметры вы будете подставлять в нужных кнопках.


 
Oleg1963 ©   (2009-11-12 09:17) [10]

Здравствуйте Николай!
Спасибо огромное за прекрасное объяснение. Это именно то, что я искал.
Попутно еще один вопросик. Где можно найти описание подобных процедур и функций? В учебнике Дельфи 7.Подлинник(тора блин!) где-то между строк видел фразу "Подробное описание вы можете найти в описании фукций API" >:-(
Авторы сего предполагают, что я намереваюсь выводить картиночки на экран, попутно набрасывая на коленке сервер распределенных баз данных с возможностью управления космическими кораБЛЯми!
А на такую "мелочь" жалко тратить бумагу....


 
Sergey13 ©   (2009-11-12 09:40) [11]

> [0] Oleg1963 ©   (11.11.09 14:05)

А ты не перемудрил со всякими Edit-ами. Ты, я так понял, выводишь на экран что то из БД (FieldByName("NetPath").AsString). Так может стОит использовать компоненты с приставкой DB? Тот же ДБГрид например. Вывести свои 8 (или сколько там есть) адресов в грид и обработать редактирование поля через "выбор пути в OpenDialog" и вот тогда уже сделать "пальцы веером"?


 
Oleg1963 ©   (2009-11-12 09:59) [12]

DBGrid у меня подвешен на этапе разработки для контроля активности БД с сетевыми путями. Мне вообще очень нравится эта игрушка (дбгрид).

Но КАК ОНА РАБОТАЕТ????!!!!! Ведь путного описания нет! В книге говорится, что содержимое ГРИДа (то бишь строки) адресации не имеют. Но мне в это не верится.
Я вообще хотел бы вывести содержимое БД на экран в виде:

-Содержимое записи 1 (пути,бла бла бла, размер сапог и т.д)
-Пустая строчка---------------------------------------------
-Содержимое записи 2 (пути,бла бла бла)-
-Пустая строчка---------------------------------------------
Рамочки, фенечки,рюшечки и бантики вокруг (в пределах разумного конечно)
И чтобы редактировать их можно было бы как в ДБГриде. Ваще красота!

Вот только реально ли это сделать, причем малой кровью......


 
sniknik ©   (2009-11-12 10:18) [13]

> procedure TForm1.BitBtn4Click(Sender: TObject);        {Участок № 2}
> begin
>  Edit21.Text := GetPath(Edit21.Text);
> end;
логическое продолжение...
procedure TForm1.BitBtnClick(Sender: TObject);    
begin
 with TEdit(TBitBtn(Sender).Tag) do
   Text := GetPath(Text);
end;

и вешаем 1 обработчик всем батонам... (т.е. это будет единственный код на все однотипно работающие кнопки )
ну, и предваритетельная подготовка -
procedure TForm1.FormCreate(Sender: TObject);
begin
 BitBtn1.Tag:= Integer(Edit1);
 ...
 BitBtn21.Tag:= Integer(Edit21);
end;

что тоже можно было бы в цикле через поиск компонент (сократить количество написанного)... но, имхо, лишнее, и при правильном именовании компонент (значимом, не Edit1, а NetPathEdit и т.д.) будет не рабочим. не желательно закладываться на имена...


 
sniknik ©   (2009-11-12 10:19) [14]

p.s. и "пальцы веером", это уж совсем лишнее...


 
Sergey13 ©   (2009-11-12 10:19) [15]

> [12] Oleg1963 ©   (12.11.09 09:59)
> Ваще красота!

ИМХО, красота ("Рамочки, фенечки,рюшечки и бантики вокруг") - это проблема №95968678 для программы. Или вообще не проблема. Особенно на этапе изучения инструмента. С таким подходом у тебя скорее всего получится уродливый монстр - как снаружи так и изнутри. Потому, что красота - это тоже наука, ее тоже надо изучать, причем, возможно, дольше чем Делфи. А разработчики всяких гридов, помимо прочего, имели наверное представление и об эргономике и т.п.

> Ведь путного описания нет!
Какого описания тебе надо? Это средство визуализации датасета.


 
Andrewtitoff ©   (2009-11-12 10:29) [16]


> Sergey13 ©   (12.11.09 10:19) [15]
> > [12] Oleg1963 ©   (12.11.09 09:59)> Ваще красота!ИМХО,
>  красота ("Рамочки, фенечки,рюшечки и бантики вокруг") -
>  это проблема №95968678 для программы. Или вообще не проблема.
>  Особенно на этапе изучения инструмента. С таким подходом
> у тебя скорее всего получится уродливый монстр - как снаружи
> так и изнутри. Потому, что красота - это тоже наука, ее
> тоже надо изучать, причем, возможно, дольше чем Делфи. А
> разработчики всяких гридов, помимо прочего, имели наверное
> представление и об эргономике и т.п.


Это точно, помнб как одну из первых прог всю облепил текстурами, анимацией, звуками, разноцветными шрифтами, всякими кривыми формами с прозрачностями и.т.д..., запускаешь - такая красота!, все были в изумлении и писали кипятком, только когда люди начали реально работать с ней то через небольшой промежуток времени умоляли убрать это ве т.к. глаза болят, все отвлекает, ничего не понятно... =))))


 
Oleg1963 ©   (2009-11-12 10:41) [17]

Насчет красоты я абсолютно согласен. Я не имел ввиду разное украшательство продукта, задача вполне деловая. Но при этом она должна выглядеть достаточно аккуратно и эстетично. Можно конечно сделать форму с огромными кнопками "Выполнить" и "Выход", но так ведь тоже нехорошо.

(голос из угла: "так, открываю Тотал, где там эта машина черт бы ее забрал, файл, копирую.... Уф! Следующая....") :-)))


 
Kolan ©   (2009-11-12 11:20) [18]

Олег, я ничего не понял. Это не встроенная функция. Это я просто сделал функцию. Как описывать функции и методы есть в любом учебнике по делфи, а также во встроенной справке должно быть.


 
Oleg1963 ©   (2009-11-12 11:31) [19]

Функция пользователя, ясно. Ваш совет прекрасно работает. Так что я вооружился ножницами и, высунув язык, кромсаю лишний код. Дышать стало намного легче :-)))


 
Григорьев Антон ©   (2009-11-12 12:50) [20]

http://www.delphikingdom.com/asp/answer.asp?IDAnswer=71458 - самый нижний ответ. Хотя для данного конкретного случая sniknik уже подсказал правильное решение, для общего развития всё равно полезно.



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

Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.005 c
15-1257181639
Badevlad
2009-11-02 20:07
2010.01.03
Обсудить BDV DataHider 3.1


1-1232363254
Denis__
2009-01-19 14:07
2010.01.03
НЕстандартное сложение


15-1257283812
Юрий
2009-11-04 00:30
2010.01.03
С днем рождения ! 4 ноября 2009 среда


15-1257084331
SergP
2009-11-01 17:05
2010.01.03
Интерестные задачки из IQ-теста


15-1256130971
Кто б сомневался
2009-10-21 17:16
2010.01.03
РАО





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский