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

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

Автор: Frodo_Torbins
Дата сообщения: 21.04.2010 10:43
SIgor33
А что там с памятью для "new: PInteger"?
Автор: SIgor33
Дата сообщения: 21.04.2010 12:06
Odysseos
ошибка такая
Автор: svs123456789
Дата сообщения: 21.04.2010 12:06
на форме- frxReport1 от Fast Reports - нем на MasterData Memo1 и Rich1
нужно из программы передать строки в Rich1 - пишу :
[more]
procedure TTest_Print_Form.frxReport1BeforePrint(Sender: TfrxReportComponent);
var
Memo:TfrxMemoView;
//t : TfrxRichView;
begin
memo:= frxReport1.FindObject('memo1') as TfrxMemoView;
Memo.Text := 'Здесь текст' ;

//t := TfrView(frReport1.FindObject('Rich1'));
//Rich1.;
[/more]
как передать текст в ричэдит ?
Автор: Odysseos
Дата сообщения: 21.04.2010 12:29
SIgor33

Это ошибка явно не у Вас, а в том коде, который Вы вызываете из dll. (Причем - assertion, что говорит либо о жутко неправильном формате каких-либо данных (словаря?), либо о неоттестированности dll.)
Автор: SIgor33
Дата сообщения: 21.04.2010 12:52
Odysseos
Спасибо за разяснее
Автор: svs123456789
Дата сообщения: 21.04.2010 13:03
а никто не знает как в фастрепорт распечатать отчет сразу, без предварительного выбора принтера и без пред. просмотра?
нашел в их FAQ :
if frReport1.PrepareReport then
frReport1.PrintPreparedReport('', 1, True, frAll); НО у меня нет такой функции !
// или
frReport1.PrintPreparedReportDlg;
Автор: Man_Without_Face
Дата сообщения: 21.04.2010 14:18
svs123456789
frReport1.PrepareReport;
frReport1.print;
Автор: svs123456789
Дата сообщения: 21.04.2010 15:19
TWebBrowser с открытым в нем html
- как запустить-показать диалог поиска (стандартный из IE) с кнопкой "далее"
и веденным (заполненным полем) словом для поиска ?
Автор: AviDen
Дата сообщения: 21.04.2010 15:28
svs123456789, может быть, сэмулировать нажание Ctrl+F?
Автор: YuriyRR
Дата сообщения: 22.04.2010 05:02
В основной программе есть функция
function Load_Procedure(PROC: string): string;
var
CanceledByUser: boolean;
begin
CanceledByUser := False;
Result := LoadProcedure(RDM.DB, PROC, CanceledByUser, True);
end;

из DLL ее вызываю
procedure TSBERBANK_IMPORT.SAVEDClick(Sender: TObject);
begin
...
FDS.SQLs.SelectSQL.Text :=TLoadProc(Load_Proc)('Экспорт в систему ГОРОД');
...
end
пользую FastMM4
при выходе из функции в длл ошибка - неверное использование указателя
не могу побороть
Автор: svs123456789
Дата сообщения: 22.04.2010 11:03
how to call a stadard IE find dialog for the TWebBrowser component.
[more]
Usage: Simply drop an instance of TWebBrowser component on a form (and a Button) and call the find dialog as:

~~~~~~~~~~~~~~~~~~~~~~~~~
uses ActiveX;

procedure WBFindDialog(AWebBrowser: TWebbrowser) ;
const
CGID_WebBrowser: TGUID = '{ED016940-BD5B-11cf-BA4E-00C04FD70816}';
HTMLID_FIND = 1;

var
CmdTarget : IOleCommandTarget;
vaIn, vaOut: OleVariant;
PtrGUID: PGUID;
begin
New(PtrGUID) ;
PtrGUID^ := CGID_WebBrowser;
if AWebBrowser.Document <> nil then
try
AWebBrowser.Document.QueryInterface(IOleCommandTarget, CmdTarget) ;
if CmdTarget <> nil then
try
CmdTarget.Exec(PtrGUID, HTMLID_FIND, 0, vaIn, vaOut) ;
finally
CmdTarget._Release;
end;
except
end;
Dispose(PtrGUID) ;
end;
[/more]
Автор: AviDen
Дата сообщения: 22.04.2010 11:25
svs123456789, вот за что "люблю" ole и activex - так это за предельно короткий, простой и очевидный код.
Автор: Frodo_Torbins
Дата сообщения: 22.04.2010 12:05
YuriyRR
Проверьте опцию ShareMM (и прочие) в FastMM4Options.inc. Она должна быть включена для exe и dll.
Автор: YuriyRR
Дата сообщения: 22.04.2010 14:57
Frodo_Torbins
Проверил включено, ошибка при освобождении строки в завершающем коде компилятора при выходе из функции. идей нет.

Добавлено:
Вот еще с основной программе
function Load_ProcedureP(PROC: string): PChar;
var
CanceledByUser: boolean;
sql_str: PChar;
begin
CanceledByUser := False;
sql_str := StrNew(PChar(LoadProcedure(RDM.DB, PROC, CanceledByUser, True)));
Result := sql_str;
end;

в DLL
procedure TSBERBANK_IMPORT.SAVEDClick(Sender: TObject);
var
ps: PChar;
begin
...
ps := Load_Proc('Экспорт в систему ГОРОД');
...
end
так все работает, но по идее надо освободить память
если в текст функции вставляю strdispose(ps); та же ошибка
что я не понимаю? подскажите плиз

Добавлено:
strdispose естно в DLL вставляю
Автор: Frodo_Torbins
Дата сообщения: 22.04.2010 17:59
Frodo_Torbins
Все же проверьте куда у вас указывают поля System.MemoryManager в dll и exe. И кстати в какой версии делфей они скомпилированы? Передача строк из D2009 в D2007 скорее всего не будет работать.
В крайнем случае стиль винапи или вайдстринги никто не отменял.
Автор: YuriyRR
Дата сообщения: 22.04.2010 23:31
Вопрос снят. Разобрался. Сам дурак )
Автор: TechnoDreamer
Дата сообщения: 25.04.2010 00:59
Можно ли как то TWebBrowser'у подменять изображения, хранящиеся в базе данных?
В общем есть БД в которой хранятся jpeg'и, есть код генерируемый TPageProducer. Генерируемый HTML загружается в TWebBrowser посредством TStreamAdapter. В тексте HTML есть картинки, хотелось бы иметь возможно их загружать без предварительной записи на диск. Реально ли?
Автор: JohnSilver182
Дата сообщения: 25.04.2010 10:57
TechnoDreamer Я тоже подумывал . Кроме .MHT (Multipurpose Internet Mail Extension HTML (MHTML)) мне в голову ничего не пришло .


Автор: VandB
Дата сообщения: 25.04.2010 18:57
Добрый день!
Столкнулся с такой проблемой: Нужно узнать существует ли изображение в интернете или нет, например дается адрес хттп://мой сайт/папка/1.jpg надо узнать по этому адресу есть картинка или нет, (учитывая что может выйти страница с кодом ошибки 404). код должен быть минимален.... Изображение из нета загружается по этому коду :

Код:
tt:=pwidechar(edit1.tex);
OleCheck(URLOpenBlockingStreamW(nil, tt, Stream, 0, nil));
OleCheck(OleLoadPicture(Stream, 0, True, IID_IPicture, Pict));
OleCheck(Pict.get_Handle(OLE_HANDLE(Bitmap)));
Image1.Picture.Bitmap.Handle := Bitmap;
image1.AutoSize:=true;
Автор: EugeneBoss3
Дата сообщения: 26.04.2010 02:20
Коллеги, вопрос по индексам в Apollo VCL.
Помогите разобраться с созданием и применением индексов. Пытаюсь создать индекс как в хелпе написано, но изменения в гриде не отображаются.
[more=Пример]
with ApTbl do
begin
{Open table}
Open;
{Index on CUSTOMER, non-unique, non-descending, no condition}
iOrd1 := Index('t1.ntx', 'CUSTOMER', IDX_NONE, False, '');
{Index on upper-cased LAST, unique, non-descending, no condition}
iOrd2 := Index('t2.ntx', 'upper(LAST)', IDX_UNIQUE, False, '');
{Index on COMPANY, non-unique, descending, for STATE="CA" }
iOrd3 := Index('t3.ntx', 'upper(COMPANY)', IDX_NONE, True,'STATE="CA"');
{Make T2.NTX the active order}
SetOrder( iOrd1 );
end;
[/more]
Автор: AviDen
Дата сообщения: 26.04.2010 09:06
TechnoDreamer, а пусть твоё приложение отдаёт рисунки веббраузеру по http с локального хоста

Добавлено:
upd: а если серьёзно, то рыть нужно сюда: http://msdn.microsoft.com/en-us/library/aa767916(v=VS.85).aspx

Т.е., предлагается при запуске приложения регистрировать свой собцтвенный Asynchronous Pluggable Protocol Handler для кастомной URL-схемы, напр., "MyApp", и потом через неё отдавать веббраузеру контент, используя ссылки типа "MyApp:folder1\folder2\image.jpg". Где-то так.
Автор: egerLESHIK
Дата сообщения: 26.04.2010 15:36
Здравствуйте, уважаемые. Не могли бы Вы просветить на счет компоненты Tregistry в части работы с бинарными данными в реестре. И Google-м искал и на популярных форумах по Delphi побывал и некоторые книжки пересмотрел. Впрочем, видать, что-то недопонял.
К примеру записываю некий набор цифр, например, 548158 в файл реестра, там он сохраняется под бинарным кодом: b8 c9 47 01. Если пытаться перезаписывать 548158 несколько раз в этот файл - код будет изменяться, к примеру у меня сохранялось под:
- b8 c9 37 01;
- b8 c9 3с 01;
Как я обратил внимание всегда менялась 3 пара чисел. Здесь возникает вопрос, если бинарный код непостоянен, то есть я не могу его прочесть в переменную таким образом, чтобы он принял первоначальное значение - 548158?
Вот собственно цель к которой иду, чтобы получить исходное значение 548158 из бинарного кода записанного в файл реестра.
Спасибо.
Автор: AviDen
Дата сообщения: 26.04.2010 16:29
egerLESHIK, простите, но вы абсурд какой-то написали. TRegistry с бинарными данными работает безукоризненно. Ищите ошибки в своём коде.
Автор: Frodo_Torbins
Дата сообщения: 26.04.2010 16:43
egerLESHIK
Предположительно проблемы с указателями в вашем коде.
Автор: egerLESHIK
Дата сообщения: 26.04.2010 17:16
Ну коль я где-то допустил ошибки, не могли бы Вы подсказать где мой промах? Ниже привожу коды:
[more=1. Запись данных в реестр: ]
Код: // процедура записи в бинарник-реестр
procedure Reg_WriteTools(dwRootKey: DWord; const sKey: string; const sField: string; aUser:string);
begin
with TRegistry.Create do
try
RootKey := dwRootKey;
if OpenKey(sKey, True) then
begin
try
WriteBinaryData(sField, aUser, SizeOf(aUser));
finally
CloseKey;
end;
end;
finally
Free;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
reg := tregistry.create;
reg.rootkey:=HKEY_CURRENT_USER;
reg.openkey('Software\prog\test',true);
Reg.CreateKey('tools');
reg.openkey('tools',true);
Reg_WriteTools(HKEY_CURRENT_USER, 'Software\prog\test\tools','number',Edit2.Text);
reg.closekey;
reg.destroy;
end;
Автор: Frodo_Torbins
Дата сообщения: 26.04.2010 18:25
egerLESHIK
aUser - указатель, SizeOf(aUser) - размер указателя. Кроме того, в реестр вы пытаетесь писать строку, а читать - число.
Автор: Bonivur
Дата сообщения: 26.04.2010 18:30
egerLESHIK
исправьте Ваш код в 2-ух местах:


Код:

procedure Reg_WriteTools(dwRootKey: DWord; const sKey: string; const sField: string; aUser:Integer);
....


Reg_WriteTools(HKEY_CURRENT_USER, 'Software\prog\test\tools','number',StrToInt(Edit1.Text));

Автор: egerLESHIK
Дата сообщения: 26.04.2010 19:03
Frodo_Torbins
Bonivur

Премного благодарен за Вашу помощь. Спасибо, что уделили внимание. Действительно ошибка была в разных типах данных.
Автор: TechnoDreamer
Дата сообщения: 26.04.2010 21:54
AviDen:

Цитата:
upd: а если серьёзно, то рыть нужно сюда: http://msdn.microsoft.com/en-us/library/aa767916(v=VS.85).aspx

Да, этот вопрос я уже немного изучил. Только насколько я понимаю, использование не клиент-серверной модели вряд ли получится. А разделять приложение на два, это как минимум получить проблему с файрволами. В общем то, после обдумывания, не настолько оно мне и нужно, будут временные файлы.

Есть еще мегавариант, хранить картинки в HTML (base64) и рисовать их таблицами:
http://www.bennherrera.com/EmbeddedImage/example.html
К сожалению метод слишком медленный.
Автор: OOD
Дата сообщения: 27.04.2010 12:07
Подскажите в чем ошибка, нужно упаковать dbf файл , в котором записи помечены на удаление:
код:


Код: uses
DbiProcs;

function TablePack(oTable : TTable): DBIResult;
begin
oTable.Close;
oTable.Exclusive := TRUE;
oTable.Open;
Result := DbiPackTable(oTable.DBHandle, oTable.Handle, nil, nil, TRUE) ;
end;

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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