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

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: ZBEP
Дата сообщения: 08.12.2010 22:11
Необходимо сделать возможность добавления условий/циклов, во время работы программы, причем не ограничиваясь в количестве (т.е. количество условий/циклов изначально не известно и должны будут добавляться/удаляться динамически).
Можно ли это как-нибудь реализовать?

Пока приходит на ум только хранения части условий в файле, а в коде процедуры проверять наличие условия/алгоритма в файле и если оно существует/записано, то вставлять в цикл с "макетом" условия/цикла.
Ну это немного странный способ реализации задуманного, может есть более "гуманный" способ?
Автор: data man
Дата сообщения: 08.12.2010 22:18
ZBEP


Цитата:
может есть более "гуманный" способ?

Как вариант, использовать какую-либо скриптовую библиотеку, благо их полно - от интерпретаторов до компиляторов.

Но повозиться, конечно, придётся.
Ещё можно попробовать поколдовать с OmniThreadLibrary.

Добавлено:
А вопрос не в той теме задал
Автор: Cryogen2003
Дата сообщения: 09.12.2010 09:01
Привет всем. Как можно сделать NTLM авторизацию внутри приложения? Нужно, чтоб пользователь нормально залогинился в программу (сейчас все сделано через LDAP), но чтоб тупо не вбивал ничего при входе в программу. Такое возможно?
Или я не там вопрос задал?
Автор: tanaseduard
Дата сообщения: 09.12.2010 09:25
Cryogen2003

Авторизация через AD?
Автор: Cryogen2003
Дата сообщения: 09.12.2010 09:36
Да, через AD. Сейчас идет соединение через LogonUser, а хотят сделать так, чтобы пользователь регился в программе (и разумеется шли логи в AD, что пользователь подсоединялся к программе), но прозрачно для пользователя. В том же IE есть такая вещь, как NTLM авторизация (пользователь заходит на интранет и у него уже сразу весь профиль его открыт, а в АД в логах, что пользак подсоединился к АД и был проверен в нем). Вот хотят примерно так же, но в моем приложении.
Все это конечно не секьюрно, но хотят черт побери такое.
Автор: spasius
Дата сообщения: 10.12.2010 03:33
cxGrid + UniDAC + SQLite = неработают boolean поля. Грид их просто не понимает. Может кто сталкивался?
Автор: BofA
Дата сообщения: 10.12.2010 08:11
Извиняюсь за возможно глупый вопрос.
В Model View открываю диаграмму проекта, на Tool Palette выбираю Dependency и пытаюсь нарисовать "пунктирную стрелку" от одного юнита к другому. В Delphi 2007 всё прекрасно рисуется, а в Delphi XE "стрелку" нарисовать не даёт. Причём если сохранить диаграму в 2007 и открыть в XE, то все Dependency-стрелки на месте, но новые не рисуются. В чём может быть дело?
Автор: DreamKHV
Дата сообщения: 10.12.2010 13:55
Привет всем.
Интересует вопрос по настройке редактора кода Delphi 2010. Как заставить его генерировать обработчики, вставляя их в конец pas-файла, а не сортируя по алфавиту?
Автор: tanaseduard
Дата сообщения: 10.12.2010 15:30
Господа.
Никто не встречал программки для сборки необходимых bpl для проекта.
Проект весь на runtime, после обновления версий компонентов и т.д., долго собирать все необходимые bpl для успешного запуска проекта на другом ПК.
Автор: psa1974
Дата сообщения: 10.12.2010 15:46
DreamKHV
Этот вопрос уже где-то тут на форуме обсуждался - никак нельзя заставить вставлять генерируемые обработчики в конец файла, таких настроек нет. Такое поведение изменилось начиная с Дельфи 2005 - когда среда Дельфи стала похожа на Visual Studio... Разве что самому писать эксперта для IDE...
Автор: Frodo_Torbins
Дата сообщения: 10.12.2010 16:02
tanaseduard
Если под сборкой понимается компиляция, то в старших версиях это можно с помощью msbuild-а легко организовать. В интернете можно найти статьи, или вот мой пример: http://www.alphaskins.com/forum/index.php?showtopic=4505&view=findpost&p=27164 - это сразу с загрузкой новой версии компонент, патчингом исходников, и компиляцией debug и release версий.
Автор: Varenik
Дата сообщения: 10.12.2010 16:11
DreamKHV
psa1974
ModelMaker (MMX) позволяет управлять порядком обработчиков
ЗЫ: правда, я уже и не помню: на форме тоже или только при создании компонентов/классов
Автор: tanaseduard
Дата сообщения: 10.12.2010 17:01
Frodo_Torbins

Не то.
Имеется ввиду что в бинарник проекта не вшиты все модули, проект довольно большой (300-400 bpl загружаемых модулей(в каждом модулем миyмум пара форм MDI Child)). В итоге для полноценной работы проекта надо собрать все bpl от компонентов которые юзают эти модули(Dev,UniDac, Oracle,FastReport etc...).
Самому руцями собирать все компоненты с машинки ленько, а тупо скопировать все bpl с места разработчика накладно. Бывает ситуации когда в некоторых модулях юзаються редкие библиотеки но они в тоже поставляються в bpl.
В итоге хотелосб бы иметь инструмент который бы проанализировал все "группы проектов", определил какие bpl нужны для полного функционирования всего, и вытянул их с system_dir,Lib_Path etc...

Автор: Frodo_Torbins
Дата сообщения: 10.12.2010 17:14
tanaseduard
Такого точно ничего не видел.
Хотя, bpl это ведь обычная dll-ка по сути. Можно проанализировать ее секцию импорта и определить какие еще bpl ей нужны для старта. В JCL вроде даже модули были по работе с бинарными файлами.
Автор: tanaseduard
Дата сообщения: 10.12.2010 17:17
Frodo_Torbins

Жаль.
Попробую сам написать.
Спасибо.
Автор: ZBEP
Дата сообщения: 11.12.2010 02:56
Обнаружил то ли баг, то ли косяк в способе реализации, ток хз как объяснить правильно.
Выложу часть кода, может, кто разберется.


Код: var
Form2: TForm2;
NPred,NPrep,NChas:array [0..50,0..100,1..6,1..6]of string;
SP:array [1..100] of TEdit;
SB:array [1..100] of TRadioButton;
IniFile: TIniFile;
...
var n,i:integer;
begin
IniFile:=TIniFile.Create(extractfilepath(paramstr(0))+'Data\BD.ini');
for n:=1 to 30 do
for i:=1 to 100 do
begin
ZPred[i,n]:=IniFile.ReadString('Предмет_'+inttostr(i),inttostr(n),'');
ZPrep[i,n]:=IniFile.ReadString('Преподаватель_'+inttostr(i),inttostr(n),'');
ZChas[i,n]:=IniFile.ReadString('Часы_'+inttostr(i),inttostr(n),'');
end;
...

function sIF(F:TForm;Zna1,Zna2:String;Ned,Den,Yro:integer):integer;
var Rez,Grp1:integer;
begin
for Grp1:=1 to 100 do
if(Zna1=NPred[Ned,Grp1,Den,Yro])or(Zna2=NPrep[Ned,Grp1,Den,Yro])then Rez:=1;
if rez=1 then Result:=0 else Result:=1;
end;

procedure TForm2.SpeedButton3Click(Sender: TObject);
var nre,n,np,Ned,Grp,Den,Yro:integer;
begin
for n:=1 to 100 do
if SB[n].Checked=true then nre:=n;
for np:=1 to 30 do
for Yro:=1 to 6 do
for Grp:=1 to 100 do
for Ned:=1 to 50 do
for Den:=1 to 6 do
begin
if (sIF(Form1,ZPred[Grp,np],ZPrep[Grp,np],Ned,Den,Yro)=1)and(NPred[Ned,Grp,Den,Yro]='') then
begin
NPred[Ned,Grp,Den,Yro]:=ZPred[Grp,np];
NPrep[Ned,Grp,Den,Yro]:=ZPrep[Grp,np];
end;
nre:=strtoint(inttostr(nre)); //
nre:=strtoint(inttostr(nre)); //Если это стереть, то работает некорректно.
nre:=strtoint(inttostr(nre)); //Если заменить на sleep, то все равно будет работать не корректно.
nre:=strtoint(inttostr(nre)); //Да и намного дольше.
nre:=strtoint(inttostr(nre)); //Если цикл уменьшить к примеру со 100 до 2
nre:=strtoint(inttostr(nre)); //То все нормально работает, но необходимо 100
nre:=strtoint(inttostr(nre)); //Конечно не обязательно именно так делать.
nre:=strtoint(inttostr(nre)); //Это первое, что пришло на ум.
end;
Автор: JAPWork
Дата сообщения: 11.12.2010 10:04
ZBEP
А что значит "некорректно работает"??? Как описаны ZPred и прочие на эту букву? Как соотносятся и связаны Form1 и TForm2? Существует ли Form1 на момент вызова функции SIf?
Проинициализированы ли массивы SP и SB?
Вырезанный участок кода не позволяет ничего сказать по вашему вопросу...
Разве что из общих соображений - как только начинается всякая ерунда с добавлением строк кода - ясен пень, программа лезет не совсем в те области памяти, в которые должна. Ну, например, выходит за границы массива, проверяет значения в непроинициализированнном объекте и т.д. Если у Вас иногда еще наряду с "некорректным выполнением", которое я понимаю как выдачу неверного результата, случается ошибки чтения определенных адресов, то это примерно оно и есть.
Судя по тому, что массивы у Вас описаны какие от нуля, а какие от единицы, хотя все циклы выстроены от 1 до верхних границ, вдруг у Вас есть где-нибудь циклы от нуля для массивов от единицы...
Да и зачем вообще передавать Form1 в SIf, если эта переменная там не используется. И Nre у Вас с точно получит какое-нибудь значение? А если Массив радиобатонов SB сформирован плохо?
Автор: Frodo_Torbins
Дата сообщения: 11.12.2010 11:47
А мне вообще не понятно зачем нужно столько отдельных эдитов и радиобаттонов если их можно заменить более подходящими компонентами.
Автор: ZBEP
Дата сообщения: 11.12.2010 15:14
Frodo_Torbins, Хз почму с эдитами, прогу сделал еще 3 года назад, сейчас нужно изменить алгоритм немного, да и сами эдиты используются только для вывода, вся база хранится в файле.

JAPWork,

Цитата:
А что значит "некорректно работает"???

Присваивает значения не всем переменным.


Цитата:
Как описаны ZPred и прочие на эту букву?


Код: ZGroup,ZPred,ZPrep,ZChas:array [0..100,1..300]of string;
Автор: Frodo_Torbins
Дата сообщения: 11.12.2010 16:05
ZBEP
Сказать что то конкретное сложно, т к код трудночитаемый и не полный. Разве что общие рекомендации:
Для начала на вкладке Compiler включить Overflow checking и Range checking.
Ну а потом тяжелая артиллерия - EurekaLog и SafeMM.
Автор: ZBEP
Дата сообщения: 11.12.2010 16:20
Frodo_Torbins, та я щас вообще не пойму в чем дело, перегрузил комп, теперь достаточно, только 1 раз написать nre:=strtoint(inttostr(nre)); для корректной работы.
(до перезагрузки необходимо было писать минимум 5 раз (ну я с запасом 8 раз писал)).
Подумал может оперативка обиделась, проверил ее - все нормально.



Цитата:
Для начала на вкладке Compiler включить Overflow checking и Range checking.

Включил, ничего не поменялось.

С тяжелой артиллерией я пока повременю)
Нужно еще учет часов и кабинетов добавить.
Автор: EwgenBelovWhite
Дата сообщения: 11.12.2010 17:49
Здравствуйте, извините если не по теме)

Имеется MySQL5.0, а также Delphi2010 есть желание написать оболочку на делфи для бд используя технологию ADO, не могу разобраться что еще необходимо установить, для связи.

Что мне делать?
Автор: tanaseduard
Дата сообщения: 11.12.2010 18:06
EwgenBelovWhite
Почему выбран ADO? Может посмотреть в сторону unidac?
Автор: Aleksoid1978
Дата сообщения: 13.12.2010 06:47
EwgenBelovWhite, tanaseduard

А еще лучше использовать Zeos - все таки он открытый/бесплатный.
http://zeos.firmos.at/
Автор: ant0ni02004
Дата сообщения: 13.12.2010 18:01
EwgenBelovWhite

скачать mysql-ODBC
Автор: ZBEP
Дата сообщения: 15.12.2010 12:16
Как сделать полностью прозрачными Edit и RichEdit, но что бы текст был виден?
Ну что бы они типа не отрисовывались, но текст вводился/показывался.
Автор: 0D0A
Дата сообщения: 15.12.2010 13:41
ZBEP
В первом приближении какта так:
[more]
Код:
unit Unit9;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm9 = class(TForm)
RichEdit1: TRichEdit;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
public
FRichWindowProc: TWndMethod;
procedure RichWindowProc(var message: TMessage);
end;

var
Form9: TForm9;

implementation

{$R *.dfm}

procedure TForm9.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_STYLE,
GetWindowLong(Handle, GWL_STYLE) and not WS_CLIPCHILDREN);
SetWindowLong(RichEdit1.Handle, GWL_EXSTYLE,
GetWindowLong(RichEdit1.Handle, GWL_EXSTYLE) or WS_EX_TRANSPARENT);
FRichWindowProc := RichEdit1.WindowProc;
RichEdit1.WindowProc := RichWindowProc;
end;

procedure TForm9.RichWindowProc(var message: TMessage);
var
Buffer: HDC;
Bitmap, OldBitmap: HBITMAP;
Origin: TPoint;
begin
if message.Msg <> WM_ERASEBKGND then
FRichWindowProc(message)
else
begin
message.Result := 1;
Buffer := CreateCompatibleDC(TWMEraseBkGnd(message).DC);
Bitmap := CreateCompatibleBitmap(TWMEraseBkGnd(message).DC,
RichEdit1.Width, RichEdit1.Height);
OldBitmap := SelectObject(Buffer, Bitmap);
Origin := ScreenToClient(RichEdit1.ClientOrigin);
MoveWindowOrg(Buffer, -Origin.X, -Origin.Y);
Perform(WM_ERASEBKGND, Buffer, 0);
Perform(WM_PAINT, Buffer, 0);
MoveWindowOrg(Buffer, Origin.X, Origin.Y);
BitBlt(TWMEraseBkGnd(message).DC, 0, 0, RichEdit1.Width,
RichEdit1.Height, Buffer, 0, 0, SRCCOPY);
SelectObject(Buffer, OldBitmap);
DeleteDC(Buffer);
DeleteObject(Bitmap);
end;
end;

procedure TForm9.FormDestroy(Sender: TObject);
begin
RichEdit1.WindowProc := FRichWindowProc;
end;

end.
Автор: ZBEP
Дата сообщения: 15.12.2010 23:14
0D0A, спс, прозрачным то делает, но и текст тоже.
Набрать могу, но не видно ничего.
Графика выводится на DX, Edit и RichEdit/Memo, необходимы, для чата.
Можно ли как-нить вообще не отрисовывать сам компонент?
Автор: 0D0A
Дата сообщения: 16.12.2010 06:33
ZBEP
Я проверял на простейшем примере - одна форма, на ней TImage, сверху RichEdit, XP без тем. Все работает. Дорабатывай рашпилем если у тебя что-то по другому
Автор: regkz
Дата сообщения: 16.12.2010 06:37
ZBEP
можно использовать контролы из ТМС, не помню насчёт ричэдита, но эдит там прозрачным делается точно

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


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