Гость
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Область видимости / 25 сообщений из 42, страница 1 из 2
12.09.2021, 10:17
    #40096942
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Добрый день. Сразу прошу меня извинить за сильно банальную тему, но столкнулся с непонятной для меня ситуацией. Итак есть проект, в нем два модуля - модуль данных (DataModule) и главная форма приложения (MainForm). В MainForm в разделе public помещаю процедуру Proc1, в раздел USES DataModule прописываю MainForm. Но если где-либо в модуле DataModule стоит написать вызов MainForm.Proc1, то возникает ошибка, что Proc1 не объявлена - просто ума не приложу в чем косяк случился? Заранее спасибо.
...
Рейтинг: 0 / 0
12.09.2021, 10:46
    #40096943
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
show me the code
...
Рейтинг: 0 / 0
12.09.2021, 11:10
    #40096945
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
MainForm

Код: 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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
unit Main;
...
  TMainForm = class(TUniForm)
    UniTimer1: TUniTimer;
    UniNativeImageList1: TUniNativeImageList;
    UniPopupMenu1: TUniPopupMenu;
    Excell1: TUniMenuItem;
    PDF1: TUniMenuItem;
    UniPanel1: TUniPanel;
    MainStatusBar: TUniStatusBar;
    UniToolBar1: TUniToolBar;
    UniSpeedButton2: TUniSpeedButton;
    bbReport: TUniSpeedButton;
    UniPanel2: TUniPanel;
    grFilials: TUniDBGrid;
    UniHiddenPanel1: TUniHiddenPanel;
    UniEdit1: TUniEdit;
    UniPanel3: TUniPanel;
    UniPageControl1: TUniPageControl;
    UniTabSheet2: TUniTabSheet;
    tvMain: TUniTreeView;
    UniTabSheet3: TUniTabSheet;
    tvAgree: TUniTreeView;
    procedure UniFormCreate(Sender: TObject);
    procedure UniTimer1Timer(Sender: TObject);
    procedure grFilialsFieldImageURL(const Column: TUniDBGridColumn;
      const AField: TField; var OutImageURL: string);
    procedure grFilialsColumnFilter(Sender: TUniDBGrid;
      const Column: TUniDBGridColumn; const Value: Variant);
    procedure grFilialsClearFilters(Sender: TObject);
    procedure UniSpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
   procedure TreeLoad(SearchNode : TUniTreeNode);
   procedure InitButton;
  end;

function MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  uniGUIVars, MainModule, uniGUIApplication, ServerModule, ActiveX, ActiveDs_TLB,
  ldapsend, synachar, procs;

function MainForm: TMainForm;
begin
  Result := TMainForm(UniMainModule.GetFormInstance(TMainForm));
end;

...

procedure TMainForm.TreeLoad(SearchNode : TUniTreeNode);
 var MainNode, NewNode, NewNode1, NewNode2 : TUniTreeNode;
     Ptr : PMyRec1;
     ind : integer;
     ArrAct : array of string;
begin



MainModule

Код: 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.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
unit MainModule;

interface

uses
  uniGUIMainModule, SysUtils, Classes, Data.DB, Data.Win.ADODB, Variants, Dialogs,
  RxMemDS, Math, ExportDS, SME2Cell, SME2XLS, sme2xlsx, SME2OLE, IdURI, ldapsend, synachar, strutils;

  procedure SetResourceString(AResString: PResStringRec; ANewValue: PChar);

const
  SNewMsgDlgWarning: PChar = 'Внимание';
  SNewMsgDlgError: PChar = 'Ошибка';
  SNewMsgDlgInformation: PChar = 'Информация';
  SNewMsgDlgConfirm: PChar = 'Подтверждение';
  SNewMsgDlgYes: PChar = 'Да';
  SMewMsgDlgNo: PChar = 'Нет';
  SNewMsgDlgOK: PChar = 'Согласен';
  SNewMsgDlgCancel: PChar = 'Отмена';
  SNewDeleteRecordQuestion: PChar = 'Удалить запись ?';
  SNewDeleteRecord: PChar = 'Удалить ?';

type
 TRegions = set of 0..100;
  TUniMainModule = class(TUniGUIMainModule)
    QVConn: TADOConnection;
    qFilials: TADOQuery;
    dsFilials: TDataSource;
    EmConn: TADOConnection;
    qFilialsID: TIntegerField;
    qFilialsTITLE: TWideStringField;
    qFiles: TADOStoredProc;
    spFiles: TADOStoredProc;
    qFilesID: TAutoIncField;
    qFilesHASH: TWideStringField;
    qFilesID_PARENT: TIntegerField;
    qFilesID_TYPE: TBooleanField;
    qFilesFILE_NAME: TWideStringField;
    qFilesFILE_PATH: TWideStringField;
    qFilesFILE_EXT: TWideStringField;
    qFilesSTATUS: TBooleanField;
    qFilesUPLOAD_DATE: TDateTimeField;
    qFilesNOTE: TWideStringField;
    qFilesFILE_SIZE: TLargeintField;
    qMain: TADOStoredProc;
    qAct: TADOStoredProc;
    spAct: TADOStoredProc;
    qActID: TAutoIncField;
    qActID_FILIAL: TIntegerField;
    qActID_SP: TIntegerField;
    qActDOC_TYPE: TBooleanField;
    qActDOC_TITLE: TWideStringField;
    qActDOC_DATE: TDateTimeField;
    qActNOTE: TWideStringField;
    qActSTATUS: TBooleanField;
    qFilialsRegionCode: TWideStringField;
    qFilialsRegionName: TWideStringField;
    qFilialsAgreePresent: TIntegerField;
    XLSExp: TSMExportToXLS;
    qReport1: TADOQuery;
    qReport1title: TWideStringField;
    qReport1RegionName: TWideStringField;
    qReport1Regioncode: TStringField;
    qReport1AGREEMENT_STATUS: TStringField;
    qReport1TITLE_NUM: TWideStringField;
    qReport1Contragent: TWideStringField;
    qReport1AnalogOff: TStringField;
    XLSExp1: TSMExportToXLS;
    spAgent: TADOStoredProc;
    qAgent: TADOStoredProc;
    qAgentID: TAutoIncField;
    qAgentID_FILIAL: TIntegerField;
    qAgentCONTRAGENT: TWideStringField;
    qAgentSTATUS: TIntegerField;
    qProject: TADOStoredProc;
    qProjectID: TAutoIncField;
    qProjectID_AGENT: TIntegerField;
    qProjectNUMBER: TWideStringField;
    qProjectCREATEDATE: TWideStringField;
    qProjectCREATOR: TWideStringField;
    qProjectPROJTYPE: TSmallintField;
    qProjectPROJTYPENAME: TStringField;
    qProjectSTATE: TSmallintField;
    qProjectSTATENAME: TStringField;
    qProjectPCCOMPLETE: TSmallintField;
    qProjectSTATUS: TBooleanField;
    spProject: TADOStoredProc;
    qProjectCONTRAGENT: TWideStringField;
    qMainID: TAutoIncField;
    qMainID_PROJ: TIntegerField;
    qMainDOCTYPE: TSmallintField;
    qMainDOCTYPENAME: TStringField;
    qMainDOCNUMBER: TWideStringField;
    qMainDOCDATE: TWideStringField;
    qMainDOCSTATE: TSmallintField;
    qMainDOCSTATENAME: TStringField;
    qMainSTATUS: TSmallintField;
    qMainSTARTDATE: TWideStringField;
    qMainENDDATE: TWideStringField;
    qMainCREATOR: TWideStringField;
    spMain: TADOStoredProc;
    procedure UniGUIMainModuleCreate(Sender: TObject);
    procedure qReport1CalcFields(DataSet: TDataSet);
    procedure qFilialsAfterScroll(DataSet: TDataSet);
  private
    { Private declarations }
    Step1, Step2, Step3, Step4, Step5 : TRegions;
  public
    { Public declarations }
   UserName,FullUserName,Pwd,Domain1, Domain2, Access1 : string;
   UserID, Access2 : integer;
   function SelectFromAd(fields: String = '*'; where: String = '(objectclass=*)'): String;
   function AttrByName(Attr : string) : string;
   function Params_RW : integer;
  end;

  type
  PMyCode = ^TMyCode;
  TMyCode = record
    ObjCode : string;
  end;

function UniMainModule: TUniMainModule;

implementation

{$R *.dfm}

uses
  UniGUIVars, ServerModule, uniGUIApplication, UniGUITypes, UniGUIDialogs, procs,
  Windows, Consts, DBConsts, VDBConsts, Report1, Main, AddData;

function UniMainModule: TUniMainModule;
begin
  Result := TUniMainModule(UniApplication.UniMainModule)
end;

...

procedure TUniMainModule.qFilialsAfterScroll(DataSet: TDataSet);
begin
 MainForm.TreeLoad(nil);
 //MainForm.InitButton;
end;
...
Рейтинг: 0 / 0
12.09.2021, 11:27
    #40096946
swame2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
patrick1968,

Советую давать классам более осмысленные и уникальные названия, возможно имя MainForm еще где-то объявлено и обозначает что-то другое.. Для начала попробовать обращаться Main.MainForm

И циклические ссылки между модулями это плохо для приложения, состоящего больше чем из пары форм
...
Рейтинг: 0 / 0
12.09.2021, 23:26
    #40097018
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
swame2
И циклические ссылки между модулями это плохо

Чем же?
...
Рейтинг: 0 / 0
12.09.2021, 23:48
    #40097020
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
softwarer,

мозг зацикливается.
...
Рейтинг: 0 / 0
13.09.2021, 01:55
    #40097022
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
(OFF-TOPIC)

Я немного не врубаюсь, это в современных Делфях что ли заменили глобальную переменную инстанса формы на функцию с таким же именем?

Код: pascal
1.
function MainForm: TMainForm;



раньше было так:
Код: pascal
1.
2.
var
   MainForm: TMainForm;
...
Рейтинг: 0 / 0
13.09.2021, 02:05
    #40097023
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Кроик Семён,

Это фишка UniGUI: там инстанс формы не один на приложение а один на сессию.
Вот вместо простой глобальной переменной и используется функция.
...
Рейтинг: 0 / 0
13.09.2021, 02:06
    #40097024
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Кроик Семён
(OFF-TOPIC)

Я немного не врубаюсь

Это UniGUI.
...
Рейтинг: 0 / 0
13.09.2021, 02:14
    #40097025
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
rgreat,
northener,

ясно, спасибо
...
Рейтинг: 0 / 0
13.09.2021, 02:47
    #40097026
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Кроик Семён
rgreat,
northener,

ясно, спасибо

А вот мне нифига неясно. На кой хрен оно, это UniGUI кому-то нужно.
...
Рейтинг: 0 / 0
13.09.2021, 03:03
    #40097027
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
northener
А вот мне нифига неясно. На кой хрен оно, это UniGUI кому-то нужно.

И сколько ты заплатишь за то, чтобы кто-то развеял твоё недоумение?
...
Рейтинг: 0 / 0
13.09.2021, 03:21
    #40097028
northener
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
softwarer
northener
А вот мне нифига неясно. На кой хрен оно, это UniGUI кому-то нужно.

И сколько ты заплатишь за то, чтобы кто-то развеял твоё недоумение?

Ни одной копейки! :)
Меня и так всё устраивает. Но тот, кто что-то новое предлагает, должен убедить меня, что мне это нужно! :)
...
Рейтинг: 0 / 0
13.09.2021, 03:33
    #40097029
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
northener
Но тот, кто что-то новое предлагает, должен убедить меня

Ты правда думаешь, что кому-то зачем-то сдался, или просто косплеишь бабу с сайта знакомств?
...
Рейтинг: 0 / 0
13.09.2021, 09:26
    #40097048
cptngrb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
northener, а если не uniGUI, то что?
...
Рейтинг: 0 / 0
13.09.2021, 09:34
    #40097056
swame2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
softwarer,

Если забыть о красивости архитектуры, при нескольких десятках зависимостей в проекте уже начинает тормозить компилятор,
IDE еще раньше, потом с какого то момента вообще не может перекомпилить проект без Build.
Скорость компиляции может упасть в разы.
...
Рейтинг: 0 / 0
13.09.2021, 09:40
    #40097058
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
swame2,

бред какой-то. почти сотня унигуевых форм, почти миллион строк кода в проекте, полет нормальный.
...
Рейтинг: 0 / 0
13.09.2021, 10:06
    #40097067
swame2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
makhaon,

Имеет значение не количество форм, а количество циклических ссылок.
Сотня форм может еще не дать критическое число, вопрос какие между ними ссылки.
У нас заметные проблемы были лет 10 назад, проект бы примерно 600К строк, 500 модулей. При возрастании количества циклических ссылок выше нескольких сотен зависимостей скорость компиляции на Delphi 7 быстро выросла с 25 с до 3 мин.
На Delphi2010 этот проект вообще не мог скомпилиться, более новые компиляторы более чувствительны к этой проблеме.
Сейчас 1,5М строк, 2500 модулей, все компилится отлично, потому что циклические зависимости развязаны, осталось несколько десятков.
...
Рейтинг: 0 / 0
13.09.2021, 11:02
    #40097091
Virtual Student
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Люди придумали библиотеки давным-давно...
...
Рейтинг: 0 / 0
13.09.2021, 11:37
    #40097115
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Так вроде в одном проекте нельзя создать два класса с одинаковыми именами, а то точно путаница будет, стало быть проблема не в этом.
...
Рейтинг: 0 / 0
13.09.2021, 12:10
    #40097128
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
patrick1968,

можно
...
Рейтинг: 0 / 0
13.09.2021, 12:14
    #40097129
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Классы(типы) с одинаковыми именами есть даже в RTL. К сожалению.
...
Рейтинг: 0 / 0
13.09.2021, 13:22
    #40097184
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
patrick1968
Так вроде в одном проекте нельзя создать два класса с одинаковыми именами, а то точно путаница будет, стало быть проблема не в этом.

нельзя создать в одном юните
[DCC Error] E2004 Identifier redeclared:
...
Рейтинг: 0 / 0
21.09.2021, 18:04
    #40099118
patrick1968
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
Странно и удивительно одно - если создаю еще форму, то процедура из MainForm прекрасно видна и работает, а вот из DataModule нет, зато из DataModule видны процедуры новой формы - посему неясно в чем отличие MainForm и новой формы. Ведь в UNIGUI нет понятия, главной формы, интересно тогда откуда приложение понимает - какую форму вызывать как основную
...
Рейтинг: 0 / 0
21.09.2021, 18:24
    #40099120
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Область видимости
patrick1968
Странно и удивительно одно - если создаю еще форму, то процедура из MainForm прекрасно видна и работает, а вот из DataModule нет, зато из DataModule видны процедуры новой формы - посему неясно в чем отличие MainForm и новой формы.
Открой для себя ключевое слово "uses".

Ведь в UNIGUI нет понятия, главной формы, интересно тогда откуда приложение понимает - какую форму вызывать как основнуюСм. скриншот.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Область видимости / 25 сообщений из 42, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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