powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Откуда открыта форма.
13 сообщений из 13, страница 1 из 1
Откуда открыта форма.
    #39827483
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное глупый вопрос, терзают сомнения правильно ли я сделал.
Есть форма с гридом списка клиентов, форма может вызыватся с кучи разных мест, ее одна задача передать id_client который был выбран по двойном щелчку на гриде.
Для определения места откуда была выбрана форма я перед отображением формы смойству tag данной формы присваиваю какое то значение по токорому потом идентифицирую откуда была вызвана форма.
Возможно есть более элегантный вариант это сделать, так как при каждом новом месте открытия списка клиентов приходится добавлять условие откуда была открыта форма.
заранее спасибо.
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827486
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
UNIT ...... //тот юнит, где форма

INTERFACE

type
   TEditClientForm = class(TForm)
   private
      FClientID  : string;
   public
      ...
      procedure InitForm(const AClientID: string);
      ...
   end;
  
   //эта процедура будет создавать окно, поклазывать его и освобождать его память после закрытия 
   procedure ExecEditClientForm(const AClientID: string);
IMPLEMENTATION   
uses SysUtils;
...
...

procedure TEditClientForm.InitForm(const AClientID: string);
begin
   //сохраняем значение ID клиента 
   FClientID := AClientID;
   ....
   //всякие другие действия: открытия датасетов и т.д.
   ....
end;

// =========================================================================


procedure ExecEditClientForm(const AClientID: string);
var
   dlg : TEditClientForm;
begin
   dlg := TEditClientForm.Create(AClientID);
   try
      dlg.InitForm(AClientID);
      dlg.ShowModal();
   finally
      FreeAndNil(dlg);
   end;
end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
//в каком-нибудь другом месте программы показ диалогового окна сводится к вызову 
//процедуры и передачей ей в качестве аргумента ID клиента

ExecEditClientForm('1');

ExecEditClientForm('100');

ExecEditClientForm('35');
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827487
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashauaДля определения места откуда была выбрана форма я перед отображением формы смойству tag данной формы присваиваю какое то значение по токорому потом идентифицирую откуда была вызвана форма.


Не понятно, для чего нужно знать "место откуда была выбрана форма". На что это влияет?
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827513
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форма по выбору клиента не должна знать откуда её вызвали. Её цель отдать клиента. Ну максимум встать на нужного клиента при открытии. Но для этого нужно передать клиента параметром.
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827562
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064SashauaДля определения места откуда была выбрана форма я перед отображением формы смойству tag данной формы присваиваю какое то значение по токорому потом идентифицирую откуда была вызвана форма.


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

Например:
Форма может быть открыта с карточки клиента, после выбора клиента в метод выборки карточки клиента необходимо передать id_client.
Форма может быть открыта с формы продажи, в таком случае продажа осуществляется на выбранного id_client.
итд...
После выбора клиента разные вырианты работы с id_client могут быть.
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827567
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,

тынц
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827576
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashauax1ca4064пропущено...


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

Например:
Форма может быть открыта с карточки клиента, после выбора клиента в метод выборки карточки клиента необходимо передать id_client.
Форма может быть открыта с формы продажи, в таком случае продажа осуществляется на выбранного id_client.
итд...
После выбора клиента разные вырианты работы с id_client могут быть.
Вот эти "разные вырианты работы с id_client" и делай после закрытия формы. Это не её задача, ей дали список клиентов - она вернула выбранного, всё.
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827577
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua, понятнее не стало...
Я надеюсь, у вас такой алгоритм работы: открыта карточка клиента - поднимаем диалоговое окно с гридом (ваша форма Икс), после того, как пользователь выбрал клиента, но до того, как форма Икс уничтожена - узнать у неё, какой клиент был выбран пользователем (свойство id_client);
Всё тоже самое и в случае "формы продаж".

Форма Икс не должна знать, кто её поднимает. Её функция - предоставить выбор пользователю и предоставить результат этого выбора любой "форме", которой понадобился этот выбор.

Примерно так...
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
==== unit 1 ====
procedure Form1.ButtonClick(Sender: TObject);
var
  aDlg: TdlgFormaX;
  aId: Integer;
begin
  aDlg := TdlgFormaX.Create;
  try
    if aDlg.ShowModal = mrOk then
    begin
      aId := aDlg.id_client;
    end;
  finally
    FreeAndNil(aDlg);
  end;
end;

==== unit 2 ====
interface
type
  TdlgFormaX = class(TForm)
  private
    FId: Integer;
  public
    property id_client: integer read FId
  end;

implementation

procedure TdlgFormaX.btnOkClick(Sender: TObject);
begin
  FId := dataset.FieldByName('id').AsInteger;
  ModalResult := mrOk;
end;

...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827584
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function ShowFormClient(IdClient: integer): integer;
begin
  with TFormClient.Create(Application) do 
  try
    PrepareFormAndLocateIdClient(IdClient);
    if ShowModal = 1
      then Result := Dataset['IdClient']
      else Result := -1;
  finally
    Free;
  end;
end;
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39827779
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Лучше так

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function ShowFormClient(var IdClient: integer): Boolean;
begin
  with TFormClient.Create(Application) do 
  try
    PrepareFormAndLocateIdClient(IdClient);
    Result := ShowModal = mrOk;
    if Result then
      IdClient := Dataset['IdClient'];
  finally
    Free;
  end;
end;

А то мало ли какой диапазон клиентов у него
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39828499
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за помощь, в классе clients реализовал метод который создает форму выбора клиентов, отдает ID выбранного клтента после чего уничтожается.
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39828580
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше реализовать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
TClientParam = record
  Connect: TComponent;
  IdClient: integer;
  FIO: string;
  Address: string;
  Bank: string;
.......
end;

function ShowFormClient(var Param: TClientParam): Boolean;



Когда понадобиться вернуть что-то новое, просто добавляется поле в TClientParam и не нужно перелопачивать кучу кода где вызывается эта функция.
...
Рейтинг: 0 / 0
Откуда открыта форма.
    #39828663
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Излишние навороты, кмк. Если понадобится, тогда и заменит ID на запись, а компилятор не даст собрать программу, пока все места вызова не будут приведены в соответствие.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Откуда открыта форма.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]