Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 5

Автор: lingus
Дата сообщения: 16.03.2010 22:58
akaGM
так может инклудники будут более громоздки чем resourcestring?
Автор: AviDen
Дата сообщения: 17.03.2010 09:30
Имхо если не требуется возможность изменения текста без перекомпиляции экзешника (т.е., динамическое их получение из файла/БД), то
1) если это строки небольшие - идеально использовать ResourceString или просто Const, при их большом количестве можно даже выносить их в отдельный .pas или .inc файл (чтобы потом было удобнее с ними работать, напр., локализовывать)
2) если это большие куски текста (блоки в десятки/сотни строк) - удобнее всего через ресурсы (размещая блоки в отдельных файлах)
Автор: lingus
Дата сообщения: 17.03.2010 13:52
AviDen
akaGM
С этим разобрался. Спасибо.

Второй вопрос: а как описать в подобной же ситуации древовидную структуру
с глубиной мах 3
и количество веток мах 4 в узлах

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

Автор: akaGM
Дата сообщения: 17.03.2010 14:10
lingus

Цитата:
так может инклудники будут более громоздки чем resourcestring?

а ты используй resourcestring в инклудниках :)
посмотри, например, юнит SysConst.


Цитата:
чтобы не предлагали массивы и списки для хранения дерева

тогда используй вместо дерева куст :)
ничего лучше списка/дерева для этих целей не придумано (см. Кнута), и зачем нужно байсикл изобретать?
Автор: AviDen
Дата сообщения: 17.03.2010 15:08
lingus, фаром, надеюсь, пользоваться умеешь? отобрази в нём дерево каталогов (Ctrl+T кажись), закрой и после этого взгляни в корне диска на tree.far. Его структура какбы прозрачно намекает на самый примитивный способ описания дерева.

Если узлы дерева, кроме названия, должны иметь дополнительные атрибуты, проще всего заюзать нечно вроде ini-файла, в котором имена узлов вместе с путями будут названиями секций, а внутри оных - всё, что душе пожелается. Ну, или для любителей сделать с подвыподвертом - есть ещё XML. Или JSON. Да мало ли что ещё есть.
Автор: lingus
Дата сообщения: 17.03.2010 16:13
AviDen
Мне нужно гораздо проще в плане кода.
Сделал так:

Код: i:=CreateFolder(-1,'Папка раз','Текст папки первой');
CreateModule(i,mtHello);
CreateModule(i,mtDataBase);
CreateFolder(i,'Папка два','Текст папки следующей');
i:=CreateFolder(-1,'Папка четыре','Текст папки последней');
CreateModule(i,mtHello);
CreateModule(i,mtDataBase);
Автор: zakov
Дата сообщения: 17.03.2010 23:36
Доброго времени суток!
Подскажите как программно регистрировать DCOM класс сервера на клиенте, т.е. без запуска серевера на клиенте. Должна быть какая-нить функция, которую используют компоненты Delphi при инициализации сервера. Интересует в контексте Delphi 7.
Может кто сталкивался, ткните носом в модуль, а то так лень по исходникам лазить...
Автор: delover
Дата сообщения: 18.03.2010 12:13
zakov
Зрегистрировать COM/COM+/DCOM так же, как это делает конечная ситсема, например win2000, используя TRegistry. Но скорее всего он и останется просто зареганым, как возможное для юзания количество байтов.
Автор: Man_Without_Face
Дата сообщения: 18.03.2010 12:28
Всем привет, подскажите пож, такой вот вопрос:
Стояла BDS 2006, поставил CodeGear 2007. Поставил более новые DevExpress v48.
Проект старый, не мой. Начал ругаться на [DCC Error] ERPC_Interface.dpk(33): E2202 Required package 'cxLibraryD10' not found (Поменял на cxLibraryD11). Теперь ругается на
[DCC Error] ERPC_Interface.dpk(72): F2051 Unit ERP_Interface was compiled with a different version of cxRadioGroup.TcxRadioButton. Можно ли это исправить или ставить обратно Delphi 2006?

Добавлено:
И второй вопрос: если запускать более позднии версии проекта, то проект вообще не загружается, выдает ошибки:
1. Unable to load project D:\Erpc_interface.dproj
Unable to create project D:\Erpc_interface.dproj. This project will be removed from the project group.
2. Node "BorlandProject" not found.
Автор: data man
Дата сообщения: 18.03.2010 12:38
Man_Without_Face

Цитата:
Unit ERP_Interface was compiled with a different version

Конечно будет ругаться - модуль скомпилирован другой версией Delphi.

Цитата:
Можно ли это исправить

Удалить старые dcu.
Если в проекте используются и другие либы, то будет та же ругань.
Автор: AviDen
Дата сообщения: 18.03.2010 12:38
zakov, ну для начала нужно знать, в какие ветки реестра что пишется при регистрации. Запускаешь procmon и регистрируешь сервер обsчным способом (т.е. запуск экзешника с ключом /install или как там). Анализируешь, что изменилось в реестре, отсеиваешь ненужное. Ну, дальше, думаю, понятно.
Автор: Man_Without_Face
Дата сообщения: 18.03.2010 13:53
[DCC Error] ERP_Interface.pas(268): F1026 File not found: 'dxPScxGridLnk.dcu'
Возможно поменялся в новых DevExpress файл, подскажите пож на какой нужно заменить или где об этом можно прочитать? Спасибо
Автор: data man
Дата сообщения: 18.03.2010 14:12
Man_Without_Face

Цитата:
Возможно поменялся в новых DevExpress файл, подскажите пож на какой нужно заменить

Если гриды 6-ой версии, то на dxPScxGrid6Lnk


Цитата:
где об этом можно прочитать?

В папке "DevExpress\ExpressPrinting System 3 (или 4)\Source"

Чтобы не постить тут каждую ошибку, может стоит привести список всех используемых модулей в ERP_Interface.pas ?
Автор: AviDen
Дата сообщения: 18.03.2010 14:37

Цитата:
Цитата:Unit ERP_Interface was compiled with a different version


Конечно будет ругаться - модуль скомпилирован другой версией Delphi.

data man, читай сообщение об ошибке внимательнее - речь идёт не о том, что модуль скомпилирован в другой версии IDE (это вообще не имеет значения, он бы просто скомпилировался заново), а о том, что ERPC_Interface.dcp связан с другой версией cxRadioGroup.dcu и IDE по какой-л. причине не может перебилдить ERPC_Interface.dpk, в связи с чем и возникает ошибка.

Man_Without_Face, если я не ошибаюсь, достаточно заставить иде перебилдить ERPC_Interface.dpk. Удаление всех .dcu и .dcp, как сказал data man, тоже будет не лишним.
Автор: data man
Дата сообщения: 18.03.2010 14:56
AviDen

Цитата:
читай сообщение об ошибке внимательнее

И вам того же.

Цитата:
это вообще не имеет значения, он бы просто скомпилировался заново

Да неужели ! И даже если к нему не прописаны пути ? Браво.
Автор: delover
Дата сообщения: 18.03.2010 14:57
zakov
Копать надо в сторону MIDAS (была такая сентенция, в основном для богатеньких). Грубо приблизительно можно сразу найти MConnect.pas и SConnect.pas, что указывает нам на то обстоятельство, что DCOM есть активное продолжение OLE, со всеми разумными традициями регистрации.
Автор: Man_Without_Face
Дата сообщения: 18.03.2010 15:04
data man
uses cxTextEdit,cxButtonEdit,cxDropDownEdit,cxCalendar,cxCurrencyEdit,
cxDBLookupComboBox,cxDBExtLookupComboBox,cxLabel,cxDBLabel,
Variants,StrUtils,cxRichEdit,cxDBRichEdit,
cxMaskEdit,cxGraphics,DateUtils,cxDBEdit, frmReportPreview,
cxSplitter,
cxDataUtils,
cxDB,
cxInplaceContainer,
frxDBSet,
frxExportPDF,frxExportImage,
frxExportRTF,
frxExportXML,
frxExportXLS,
frxExportHTML,
frxExportTXT,
LocalLangPack,
cxGrid, cxGridTableView, cxGridExportLink, cxNavigator, dxPSCore, dxPScxGrid6Lnk;

Теперь здесь ругается: pModuleMenuLock := TdxBarItemLinks.Create(dxBarManager);

[DCC Error] ERP_Interface.pas(2179): E2035 Not enough actual parameters

Еще фаст репорты с 3й версии на 4.8 переставил. Спасибо

Добавлено:
frxFormUtils заменил на frxFileUtils, вроде правильно

Добавлено:
Второй модуль:
requires
rtl,
vcljpg,
vcl,
dbrtl,
vcldb,
cxLibraryD11,
dxThemeD11,
cxEditorsD11,
cxDataD11,
cxExtEditorsD11,
dxBarD11,
dxComnD11,
cxPageControlD11,
cxGridD11,
dxdbtrD11,
ERPC_Interface,
vclx,
cxExportD11,
dxmdsD11,
frxDB11,
dxLayoutControlD11,
dxPSCoreD11,
bdertl,
tee,
fsBDE11,
frxBDE11,
cxPivotGridD11,
lmd70se_d10, //Здесь ругается
dsnap,
RxCtl2006,
cxTreeListD11,
HCN696_D2006Demo;

Нашел ЛМД компоненты версии 7.12 для Delphi 2007
Автор: delover
Дата сообщения: 18.03.2010 15:25

Цитата:
zakov

И на сколько я помню, для регитраций используется раздел локальной машины. Если очень хорошо попросить систему - она позволяет, но это далеко не значит, что в системе вообще разрешены активные компоненты. Лицензия бывает облегчённая (по секрету, -наверно для тех кто умеет экономить). Пользователям такой системы удастся увидеть сообщение об ошибке и всё.
Автор: data man
Дата сообщения: 18.03.2010 15:41
Man_Without_Face

Цитата:
pModuleMenuLock := TdxBarItemLinks.Create(dxBarManager);

[DCC Error] ERP_Interface.pas(2179): E2035 Not enough actual parameters

В dxBar.pas:
Код: constructor TdxBarItemLinks.Create(ABarManager: TdxBarManager; ALinksOwner: IdxBarLinksOwner);
Автор: Man_Without_Face
Дата сообщения: 18.03.2010 16:21
data man

Цитата:
Нужно добавить второй параметр - dxBar.

Если можно поподробнее, не совсем понял, вот нашел dxBar.pas, нашел конструктор, а что дальше?
constructor TdxBarItemLinks.Create(ABarManager: TdxBarManager; ALinksOwner: IdxBarLinksOwner);
begin
inherited Create(TdxBarItemLink);
FBarManager := ABarManager;
FLinksOwner := ALinksOwner;
FAvailableItems := TList.Create;
FCanVisibleItems := TList.Create;
FVisibleItems := TList.Create;
FRecentItems := TList.Create;
FRecentItemCount := -1;
FUseRecentItems := True;
FItemOptions := TdxBarItemOptions.Create(Self);
FPrimaryForDistributionItems := TList.Create;
end;
Автор: data man
Дата сообщения: 18.03.2010 16:52
Man_Without_Face

Цитата:
Если можно поподробнее, не совсем понял

Это я к тому написал, что иногда стоит заглянуть в исходники (или в справку), чтобы узнать, какого параметра не хватает:
Цитата:
Not enough actual parameters

Нужно написать так:
Цитата:
pModuleMenuLock := TdxBarItemLinks.Create(dxBarManager, <имя dxBar, который лежит на форме>);
Если dxBar тоже динамически создается, то указать его.
Автор: delover
Дата сообщения: 18.03.2010 21:57
Похоже InfoPath вообще больше в Офисе не комплектуется, кидаю сюда. Процедурка проще некуда. Мысль была бежать по строке с одинаковой скоростью, что и в файле экспорта.
[more="код"]
Код: [no]
{$IFDEF REGION}{$REGION '<!-- ExportToInfoPath -->'}{$ENDIF}
function TForm1.ExportToInfoPath(FileName,
NewFileName: string): Boolean;
var
p, temp: record
L, T, P, O, C, D: Integer;
S: string;
end;

procedure DeletePos(Index, Count: Integer);
begin
if p.L > Index then Dec(p.L, Count);
if p.T > Index then Dec(p.T, Count);
if p.P > Index then Dec(p.P, Count);
if p.O > Index then Dec(p.O, Count);
if p.C > Index then Dec(p.C, Count);
if p.D > Index then Dec(p.D, Count);
end;

procedure InsertPos(Index, Count: Integer);
begin
DeletePos(Index, -Count);
end;

procedure DoDelete(const nName: string; var pI: Integer);
var
I, J: Integer;
begin
I := Pos('<my:'+nName+'>', LowerCase(p.S));
J := Pos('</my:'+nName+'>', LowerCase(p.S));
if (I>0) and (J>I) then
begin
pI := I+5+Length(nName);
Delete(p.S, pI, J-pI);
DeletePos(pI, J-pI);
end;
end;

procedure DoInsert(const nXml: string; pI: Integer);
begin
if pI > 0 then
begin
Insert(nXml, p.S, pI);
InsertPos(pI, Length(nXml));
end;
end;

procedure DoInsertText(nXml: string; pI: Integer);
const
div_Start = '<div xmlns="http://www.w3.org/1999/xhtml">';
div_Stop = '</div>';
var
L: TStringList;
S: string;
I, P: Integer;
begin
nXml := StringReplace(nXml, '&', '&amp;', [rfReplaceAll]);
nXml := StringReplace(nXml, '<', '&lt;', [rfReplaceAll]);
nXml := StringReplace(nXml, '>', '&gt;', [rfReplaceAll]);

L := TStringList.Create;
try
L.Text := nXml;
for I := 0 to L.Count-1 do
begin
S := L[I];
P := Pos(' ', S);
while P > 0 do
begin
Delete(S, P, 1);
Insert(#$C2#$A0, S, P);
P := Pos(' ', S);
end;
if S = '' then S := #$C2#$A0;
L[I] := Concat(div_Start, S, div_Stop);
end;
nXml := L.Text;
finally
L.Free;
end;

DoInsert(nXml, pI);
end;

function DoSave(docXml: string; const nodesXml: string): Boolean;
var
I: Integer;
L: TStringList;
begin
Result := False;
{$IFDEF CIL}
I := Pos('<my:item />', LowerCase(docXml));
{$ELSE}
I := Pos('<my:item/>', LowerCase(docXml));
{$ENDIF}
if I <= 0 then Exit;
Delete(docXml, I, 10);
Insert(nodesXml, docXml, I);
L := TStringList.Create;
try
L.Text := docXml;
L.SaveToFile(NewFileName);
Result := True;
finally
L.Free;
end;
end;

function DoExport: Boolean;
var
ADoc: TXMLDocument;
ANodeF, ANodeN, ANodeL: IXMLNode;
I: Integer;
S: string;
ATodoItem: IMyItem;
begin
Result := False;
ADoc := TXMLDocument.Create(Self);
try
ADoc.Active := True;
ADoc.LoadFromFile(FileName);
ADoc.Active := True;

ANodeF := FindXMLRecurse(ADoc.DocumentElement, 'my:item');
if Assigned(ANodeF) then
begin
ANodeN := ANodeF;
while Assigned(ANodeN) do
begin
ANodeL := ANodeN;
ANodeN := FindXMLRecurse(ANodeN, 'my:item');
end;
ANodeN := ANodeL.ParentNode.AddChild(ANodeL.NodeName);

p.S := (ANodeF.DOMNode as IDOMNodeEx).xml;
p.L := -1; p.T := -1; p.P := -1;
p.O := -1; p.C := -1; p.D := -1;
DoDelete('tag1', p.L);
DoDelete('tag2', p.T);
DoDelete('tag3', p.P);
DoDelete('tag4', p.O);
DoDelete('tag5', p.C);
DoDelete('tag6', p.D);
temp := p;
S := '';

for I := Items.TopItem to Items.Count-1 do
begin
DoInsert(AItem.Get1k, p.L);
DoInsertText(AItem.Get2, p.T);
DoInsert(IntToStr(AItem.Get3), p.P);
DoInsert(AItem.Get4, p.O);
DoInsert(AItem.Get5, p.C);
if AItem.GetItem2 then
DoInsert('true', p.D) else
DoInsert('false', p.D);
S := S+p.S;
p := temp;
end;

Result := DoSave(ADoc.XML.Text, S);
end else
ShowQuestDlg(
'Impossible do export, because form ''%s'''#13#10+
'is empty.', [FileName], 'Unknown append format');
finally
ADoc.Free;
end;
end;

begin
Result := FileExists(FileName);
if Result then
Result := DoExport;
end;
{$IFDEF REGION}{$ENDREGION}{$ENDIF}
[/no]
Автор: zakov
Дата сообщения: 18.03.2010 23:50
Спасибо всем за советы по вопросу регистрации DCOM. Возникла другая проблема...
Как правильно настроить DCOM-сервер? При запуске на другой машине локальной сети клиент подвисает (отображается кнопка приложения на панели задач) и далее процесс не идет. Чтение логов винды ничего не дало, разрешения на сервере стоят уже для всех полные...

Хочу уточнить... Проблема возникла на разных доменах, т.е. комны не объединены одним доменом... Как правильно настроить в этой ситуации???
Автор: delover
Дата сообщения: 19.03.2010 10:48
Я сразу скажу - не знаю. Давно было, не помню. Вроде генерал писал, а может сейчас уже не генерал, лично знаком не был. Так что не бейте, за всё подряд - вопрос не ко мне. (А может даже знаком был, так уж получается...).
Автор: snike555
Дата сообщения: 19.03.2010 11:18
zakov
Сколько проблем с этими DCOM. Используйте XML-RPC.
Автор: Man_Without_Face
Дата сообщения: 19.03.2010 12:20
Всем привет, такой вот вопрос:
Поставил снова BDS 2006 + DexExpress старые (версию не знаю, но ExpressBars только 5е), FastReport 4.8. Загружаю проект, причем не важно что в рантайм или в дезайнтайм компонент dxBarManager начинает глючить, т.е. когда навожу курсор на меню, то копки "чернеют". Есть ли возможность это исправить, может кто сталкивался? Спасибо.

Добавлено:
ExpressBars удалял и ставил заново (и еще раз с "другой бочки"), тоже самое...
Автор: zakov
Дата сообщения: 19.03.2010 12:55
snike555

Цитата:
zakov
Сколько проблем с этими DCOM. Используйте XML-RPC.


Просвятите, пожалуйста! Что это такое и с чем это едят???
Как оно увязывается, если увязывается вообще с MIDAS???
Автор: snike555
Дата сообщения: 19.03.2010 13:31
zakov
что это http://ru.wikipedia.org/wiki/XML-RPC (на англоязычной ссылке больше линков на разные реализации на различных языках)
как потрогать http://sourceforge.net/projects/delphixml-rpc/
Автор: zakov
Дата сообщения: 19.03.2010 14:31

Цитата:
что это http://ru.wikipedia.org/wiki/XML-RPC (на англоязычной ссылке больше линков на разные реализации на различных языках)
как потрогать http://sourceforge.net/projects/delphixml-rpc/


как вариант удаленного вызова процедур понятно...
А как подвязать это богатство к MIDAS?
Автор: delover
Дата сообщения: 19.03.2010 17:23
zakov
Возможно придётся ещё "подвязывать" JBuilder. Проект xml-rpc наиболее удачная альтернатива. Однако, обратная противоположность DCOM, т.е. в другую сторону.
Увязывать их вместе не надо.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Clipper 5


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.