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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2012, 09:37   #1
Chikoy
Пользователь
 
Регистрация: 30.04.2012
Сообщений: 11
Вопрос Создание програмно кнопки (Button) с кодом

Помогите пожалуйста дописать код так, чтобы не просто на form1 создавалась голая кнопка то есть без программного кода, а кнопка в которой будет написан код, например:

Код:
procedure TForm1.Button6Click(Sender: TObject);
begin
 Form2:= TForm2.Create(Application);
 Form2.Caption:= 'Филиалы';
 form2.ShowModal;
end;
А вот и код другой кнопки при нажатии которой и должна создаться выше упомянутая кнопка с кодом:

Код:
procedure TForm1.Button3Click(Sender: TObject);
var
s :string;
i, n, width, top, left, size : integer;
knopka: TButton;
begin
   i:=0;
   width:=65;
   top:= 400;
   left:= 40;
   size:=9;
   ADOQuery1.SQL.Clear;
   ADOQuery1.SQL.Text:='Select count(ФИО) from Сотрудники'; //подсчет
   ADOQuery1.Open;
   n:= ADOQuery1.Fields[0].AsInteger;  //заносим  кол-во записей в переменную
   ShowMessage('Количество '+inttostr(n)); //вывод
   memo1.Clear;
   Table1.Active:= true;
   Table1.First;//переход на первую запись
   While not Table1.eof do //делать цикл пока таблица не закончится
   begin
    Memo1.lines.add(Table1.fieldbyname('ФИО').AsString); //заносим в Мемо значение поля для текущей записи
    s:= Table1.fieldbyname('Псевдоним').AsString;
    knopka:= tButton.Create(Form1);
    knopka.Parent:= Form1;
    knopka.Caption:= s;
    knopka.Top:= top+i;
    knopka.Left:= left;
    knopka.Width:= width;
    knopka.Font.Size:= size;
    Table1.Next;//переходим на следующую запись
    i:=i+30;
   end;

end;
Можно ли так сделать, если да то как, пожалуйста?

Последний раз редактировалось artemavd; 18.12.2012 в 16:26.
Chikoy вне форума Ответить с цитированием
Старый 15.12.2012, 09:48   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
knopka.OnClick:=Button6Click;
А если в Table1 100 записей, то и 100 кнопок? Почему бы не использовать ComboBox или ListBox
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.12.2012, 21:17   #3
Chikoy
Пользователь
 
Регистрация: 30.04.2012
Сообщений: 11
По умолчанию

Спасибо, работает. Отвечаю на вопрос: эта программа пишется для сотрудников автоматизации по поддержки рабочих мест пользователей в филиалах организации (60 штук) , количество сотрудников не должно превышать 10 так как их пока всего 8, а делается это для того чтобы сотрудник взяв заявки, уходя отметил в какие филиалы он поехал, чтоб другие по его следам не пошли. Ведь при нажатии кнопки с именем сотрудника открывается форма с номерами филиалов и он указывает какие филиалы берет на себя, писать это на доске фломастером уже надоело, да и почти никто писать не хочет, думаю нажать пару кнопок не так трудно как это все написать.

Ну все же возможно ли сделать так чтобы кнопки создались программно с предварительно указанным кодом? А то этот выше указанный способ помог мне создать кнопки с кодом унаследовав его с другой кнопки в form1? а вот в form2 мне нужно создать кнопки желательно программно (вручную я уже сделал), но так чтобы в ник отличалось наименование того чего эти кнопки создают при onClick:

Код:
procedure TForm2.filprimerClick(Sender: TObject);
var
  Lab:TLabel;
begin

  Lab:=TLabel.Create(form1);
  Lab.Parent:=Form1;
  Lab.Caption:='03';
  lab.Left:= x;
  lab.Top:= y;
  lab.Font.Size:= 20;
  x:= x+x1;
end;

procedure TForm2.filialClick(Sender: TObject);
var
  Lab:TLabel;
  s :string;
  knopka: TButton;
  i, n: integer;
begin
   filial.Visible:= false;
   i:=0;
   shirina2:=43;
   y2:= 16;
   x2:= 16;
   x3:= 35;
   size2:=8;
   Table2.Active:= true;
   Table2.First;//переход на первую запись
   While not Table2.eof do //делать цикл пока таблица не закончится
   begin
    s:= Table2.fieldbyname('ВСП').AsString;
    knopka:= tButton.Create(Form2);
    knopka.Parent:= Form2;
    knopka.Caption:= s;
    y2:= y2+i;
    knopka.Top:= y2;
    knopka.Left:= x2;
    knopka.Width:= shirina2;
    knopka.Font.Size:= size2;
    knopka.OnClick:=filprimerClick;
    Table2.Next;//переходим на следующую запись
    i:=30;
   end;
end;
C таким кодом кнопка filial создает мне программно кнопки но с одним и тем же параметров Lab.Caption:='03'; на все кнопки, а нужно чтоб в Caption заносилась наименование кнопок, а то получается что при нажатии на любой филиал всегда пишется филиал под номером 03. Как мне решить эту проблему подскажите пожалуйста?
Изображения
Тип файла: jpg Филиалы.jpg (102.2 Кб, 181 просмотров)

Последний раз редактировалось artemavd; 18.12.2012 в 16:28.
Chikoy вне форума Ответить с цитированием
Старый 18.12.2012, 16:39   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Отвечаю на вопрос: эта программа пишется для сотрудников автоматизации по поддержки рабочих мест пользователей в филиалах организации (60 штук) , количество сотрудников не должно превышать 10 так как их пока всего 8, а делается это для того чтобы сотрудник взяв заявки, уходя отметил в какие филиалы он поехал, чтоб другие по его следам не пошли.
Сложным путём к светлому будущему идёте: используйте таблички google - зачем изобретать велосипед)

ну а по теме:
вынесите работу с БД в ДатаМодуль и при создании/отображении формы2 заполняйте названия данными из таблицы. Вдобавок, не ленитесь использовать свойство Tag у кнопок - при общем обработчике нажатия процедуре проще будет разобраться какая из кнопок вызвала событие.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.12.2012, 17:01   #5
Chikoy
Пользователь
 
Регистрация: 30.04.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Сложным путём к светлому будущему идёте: используйте таблички google - зачем изобретать велосипед)
Не понял, извините, как решить проблему мониторинга распределения сотрудников по филиалам для выполнения там заявок с применением табличек google?
Chikoy вне форума Ответить с цитированием
Старый 18.12.2012, 19:48   #6
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

1. создаем табличку с сотрудниками (SID, SNAME) №1
2. создаем табличку со списком филиалов (FID, FNAME) №2
3. создаем табличку в которой будут храниться кросс-результаты (SID, FID, DATE) №3
4. на форму 2 DBLookupComboBox-а: 1й на сотрудников, 2й на филиалы
4.1 выбрали сотрудника, выбрали филиал - нажали кнопку "сохранить" (данные попадут в 3ю таблицу в виде: ID сотрудника, ID филиала, текущая дата)
5. остальным выбирать филиалы с №2 за исключением тех что уже есть в таблице №3 на сегодняшнюю дату
=====
не ?
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 18.12.2012 в 19:51.
Yurk@ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обычные кнопки(Button) Саша019960 C++ Builder 1 31.10.2011 19:16
Как програмно снять выделение с кнопки misher Общие вопросы Delphi 8 26.02.2011 16:46
Нажатие кнопки в игре програмно? KoSMoS Общие вопросы Delphi 4 27.07.2009 19:39
как называются кнопки(програмно)? blackstersl Общие вопросы Delphi 5 03.05.2009 16:40
Как програмно создавать кнопки лэйблы и другие элементы Zaher Помощь студентам 2 13.05.2008 08:59