powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Область видимости
25 сообщений из 42, страница 1 из 2
Область видимости
    #40096942
patrick1968
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Сразу прошу меня извинить за сильно банальную тему, но столкнулся с непонятной для меня ситуацией. Итак есть проект, в нем два модуля - модуль данных (DataModule) и главная форма приложения (MainForm). В MainForm в разделе public помещаю процедуру Proc1, в раздел USES DataModule прописываю MainForm. Но если где-либо в модуле DataModule стоит написать вызов MainForm.Proc1, то возникает ошибка, что Proc1 не объявлена - просто ума не приложу в чем косяк случился? Заранее спасибо.
...
Рейтинг: 0 / 0
Область видимости
    #40096943
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
show me the code
...
Рейтинг: 0 / 0
Область видимости
    #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
Область видимости
    #40096946
swame2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
patrick1968,

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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