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

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

Автор: delover
Дата сообщения: 24.03.2010 15:59
Odysseos
Что ж не понятного-то? Имелось в виду, что можно
Поправимо. С точки зрения компилятора я Вас прекрасно понял, как Вы заметили согласился. И попытался предложить вам ещё одну точку зрения, соответственно, не точку зрения компилятора. Спасибо, Вы в полной мере ответили на мой вопрос.

страшусь спросить - что же тогда такое строка?
Строка это с точки зрения компилятора то что может быть строкой паскаля, строкой языка Си (длина по зав. символу), строкой MSDOS ($), строкой уникодной, строкой двубайтовых символов, строкой OleVariant, строкой .NET, типизированной строкой (tmycaption = type tcaption), строкой resourcestring, и одиночным символом, и локальным массивом, и оптимизированной константой const mystr2 = 'aaa'+'bbb'+'ccc'. С точки зрения компилятора очень простой тип. А другую точку зрения позволительно?

Каша у Вас в голове, уж простите, сударь, по поводу данных и их типов
Этот топик про Delphi до 2009? Вроде да. В .NET интерфейс и класс изначально одно и то же. C точки зрения Delphi не .Net существуют операторы с интерфейсами и с классами очень похожие. Операторы с типами, очень похожие, но не похожие на 'as' и 'is'. И некоторый модуль Classes в котором имеется ввиду что Форму можно сохранить в строку, а так же некоторый набор слов Concat, Val. Вообще то, что как было в Паскале, так и присутствует.

Автор: AviDen
Дата сообщения: 24.03.2010 16:03
upd3: соврал, ряд символов с кодом <$80 также необходимо кодировать, читать здесь и здесь
Автор: JohnSilver182
Дата сообщения: 24.03.2010 16:13
Что то через PROXY не могу заставить TWebBrowser1 робить.


Код: //PRoxy
g_par.UseProxy:=cf.ReadBool('PROXY','use_proxy',false);
g_par.portproxy:=cf.ReadInteger('PROXY','port',0);
g_par.LoginProxy:=cf.ReadString('PROXY','login','бе');
g_par.PasswordProxy:=sec.Loadparm('proxy_pass','#');
g_par.HostProxy:= cf.ReadString('PROXY','host','гы гы гы');

if g_par.UseProxy then
begin
New (PIInfo) ;
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY ;
PIInfo^.lpszProxy := PChar(g_par.LoginProxy+':'+g_par.PasswordProxy +'@'+g_par.HostProxy +':'+Inttostr(g_par.PortProxy));
PIInfo^.lpszProxyBypass := PChar('');
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, piinfo, SizeOf(Internet_Proxy_Info),0);
Dispose(PIInfo) ;
end;
Автор: AviDen
Дата сообщения: 24.03.2010 16:41
JohnSilver182,
1) UrlMkSetSessionOption что возвращает?
2) Ты уверен, что в PIInfo^.lpszProxy можно пихать логин/пароль для прокси?
Я бы попробовал вместо UrlMkSetSessionOption заюзать InternetSetOption, она позволяет раздельно задать как адрес прокси, так и логин/пассворд, тем более, что
Цитата:
This function maps directly to the Microsoft® Windows® Internet function InternetSetOption
(из MSDN)
Автор: JohnSilver182
Дата сообщения: 24.03.2010 16:59

Цитата:
1) UrlMkSetSessionOption что возвращает?

Ноль возвращает

Цитата:
2) Ты уверен, что в PIInfo^.lpszProxy можно пихать логин/пароль для прокси?

не уверен
Автор: DmitryKz
Дата сообщения: 25.03.2010 08:25
Подскажите, как можно реализовать такую фичу: нечто вроде drag-and-dock кантролов в ран-тайме. Например, есть три чекбокса, описывающих некий шаблон подачи информации при цитировании из книги: автор, название работы, название книги. Надо обеспечить пользователю свободное манипулирование этими единицами информации, а также отключение какой-либо единицы, например, когда нет автора. Хочется для большей визуальности и наглядности применить вышеописанный способ. Когда элемент, на место которого передвигается другой, меняется с ним местами. Хочется спросить, как это можно сделать и как контролировать порядок контролов?
Автор: JohnSilver182
Дата сообщения: 25.03.2010 09:27
AviDen Пример бы где найти ....
Автор: delover
Дата сообщения: 25.03.2010 10:02
В воскресенье все переходим на летнее время. Готовимся писать uses DateUtils и -1.
А так же вспоминаем разницу DB.DisplayFormat и System.Format
Автор: Frodo_Torbins
Дата сообщения: 25.03.2010 10:38
DmitryKz
А стандартная демка dockex не подходит? Или вот еще: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342 Да и в JVCL на эту тему много интересного.
Автор: JohnSilver182
Дата сообщения: 25.03.2010 12:06
Hi All
А как сделать формочку наподобие главной Делфийской , что бы обрезалась по высоте на ширину тоолбаров
Автор: AviDen
Дата сообщения: 25.03.2010 13:26
JohnSilver182, а в чём, собстенно, проблема? Свойство Height заюзать не судьба?
Автор: JohnSilver182
Дата сообщения: 25.03.2010 13:38
AviDen ээээ , а сколько Height выставить ?? 100-300-500 ??
Автор: AviDen
Дата сообщения: 25.03.2010 13:49
JohnSilver182, так смотря сколько у тебя тулбаров... Ну, т.е., если смотреть на то же Delphi IDE (у меня семерка), то там высота вполне себе постоянна.
Автор: greenpc
Дата сообщения: 25.03.2010 15:26
JohnSilver182
а св-во autosize не подойдет?
Автор: Man_Without_Face
Дата сообщения: 25.03.2010 15:51
Всем привет, вопрос по Dll. К одному проекту нужно добавить dll с отчетами, кот будут из нее вызываться. Вот к примеру пусть проект [more]unit uMain;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxGraphics, cxLookAndFeels, cxLookAndFeelPainters, Menus, StdCtrls,
cxButtons, DB, DBTables;

type
TfrmMain = class(TForm)
cxButton1: TcxButton;
Database1: TDatabase;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cxButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.cxButton1Click(Sender: TObject);
var
LibHandle: THandle;
fDisplaySampleReport: procedure;
begin
LibHandle := LoadLibrary('bbc5_reports.dll');
if LibHandle = 0 then
raise Exception.Create('Не могу загрузить файл отчета...')
else
begin
try @fDisplaySampleReport := GetProcAddress(LibHandle, 'DisplaySampleReport');
if @fDisplaySampleReport <> nil then
fDisplaySampleReport; // Вызов процедуры из Dll
except
on E: Exception do
ShowMessage('Ошибка: ' + E.Message);
end;
end;
FreeLibrary(LibHandle); // Освобождение памяти занятой Dll
end;


procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Release;
frmMain := nil;
end;

end.[/more]
и сама dll [more]library bbc5_reports;

uses
SysUtils,
Classes,
uReports in 'uReports.pas' {frmReports};

{$R *.res}
procedure DisplaySampleReport;
begin
frmReports := frmReports.Create(nil);
try
frmReports.frxReport1.showreport;
frmReports.show
finally
frmReports.Free;
end;
end;

exports DisplaySampleReport;

begin
end.[/more] .Вопрос первый: почему при вызове отчета вызывает ошибку? (Access violation). Вопрос второй: как передавать параметры из маин формы в dll (в BDEquery). Стоит CodeGear2009 + fastreport 4.8. Заранее благодарен.
Автор: AviDen
Дата сообщения: 25.03.2010 16:08
Man_Without_Face,

Цитата:
почему при вызове отчета вызывает ошибку?

Ну, начнём с того, что вопрос приблизительно тождествен вопросу "почему у дяди Васи машина не едет". Когда именно возникает AV? Где stack trace?

Позволю себе немного побыть телепатом и предположить, что ошибка возникает из-за того, что код в DLL отображает отчет внутри некоторой формы (класс TForm), который, как известно, весьма тесно связан на уровне кода с глобальным объектом Application (который у DLL создаётся свой, собственный, вместо того, чтобы использовать уже имеющийся. А точнее, даже не создаётся, а = NIL, из-за чего ты и получаешь AV).

Решение: чтобы Delphi-код в динамически загружаемом модуле мог использовать не свои собственные экземпляры глобальных объектов (а также классы, модули и пр.), а имеющиеся в главном приложении, его нужно помещать не в DLL, а в BPL.
Автор: JohnSilver182
Дата сообщения: 25.03.2010 16:16

Цитата:
а св-во autosize не подойдет?
А ! точно !
Автор: Man_Without_Face
Дата сообщения: 25.03.2010 16:24
AviDen
Т.е. мой код который я прикрепил выше никак работать не будет в dll?

Добавлено:
ругается на frmReports.frxReport1.showreport;
Автор: Odysseos
Дата сообщения: 25.03.2010 16:56
Man_Without_Face

Может, попробовать оттрэйсить в дебаггере сам showreport - да посмотреть, где именно он "падает"?
Автор: Man_Without_Face
Дата сообщения: 25.03.2010 16:59
Odysseos
Я пробовал сделать его только с одной надписью "Тест", тоже самое.
Автор: AviDen
Дата сообщения: 25.03.2010 17:18
Odysseos, Man_Without_Face
трейсить ничего не нужно, разве что из спортивног интереса ))
причину бага я ж назвал

Цитата:
Т.е. мой код который я прикрепил выше никак работать не будет в dll?

В DLL именно в том виде, что ты показал - нет. Я ж говорю, проще всего это компилять в BPL, которую и подключать к проекту. BPL-ки, кстати, можно же и динамически грузить, если я не ошибаюсь, т.е. они полноценно заменяют DLL.
Автор: Frodo_Torbins
Дата сообщения: 25.03.2010 18:32
Man_Without_Face
Или ну их эти BPL, просто включите всюду рантайм пакеты. Эффект в принципе будет тот же.
Автор: Maks150988
Дата сообщения: 25.03.2010 20:32
delover
Ого, я не понимаю такое. Всегда казалось что временной пояс берется из параметров системы. Это каждый раз надо минусовать / плюсовать час или в DateUtils завязаны на каком-то времени все функции?
Автор: greenpc
Дата сообщения: 26.03.2010 07:44
Man_Without_Face
было что то похожее. лень было разбираться
в модуле длл добавил форму на которую положил фаст
и все пошло. единственное форму из длл --create но не показывал
и в форме процедура показа репорта без его создания.
Код: Procedure PluginExec; stdcall;
begin
FormR:= TFormR.Create(nil); // форма с фастом
try
FormR.ShowMyReport; // а тут только заполнение параметров и fast.showreport
finally
FreeAndNil(FormR);
end;
end; //
Автор: AviDen
Дата сообщения: 26.03.2010 10:09
Frodo_Torbins,

Цитата:
Или ну их эти BPL, просто включите всюду рантайм пакеты. Эффект в принципе будет тот же.

Кхм, а рантайм-пакет, это Вам не BPL?

greenpc, правду говорят, век живи - век учись... Сколько компонентов под Delphi переделал, а вот только сейчас узнал, что Application.Handle, оказывается, доступно на запись. Ну, тогда это полностью снимает все вопросы, я думаю, что и танцы с созданием, но не отображением формы будут не нужны.

Но в любом случае, использовать bpl будет немного эфективнее, т.к. если компилить dll-ку и в ней присваивать Application.Handle - всё будет работать отлично, кроме того, что в длл будет включена своя собственная копия модуля Forms, Controls и иже с ними. В случае же с BPL - нет (при условии, если соответственно настроить Requires list у бпл-ки и runtime package list у приложения).
Автор: greenpc
Дата сообщения: 26.03.2010 11:33
AviDen
давайте не будем смешевать bpl и dll
автор просил dll - пожалуйста
а что эффективнее надо смотреть от задачи. мне часто приходится писать программу и модули на разных языках. поэтому вариантов обмена не так много
Автор: AviDen
Дата сообщения: 26.03.2010 15:21
greenpc, да я и не пытаюсь. Я говорил исключительно о данном частном случае, а в нем и хост-приложение, и dll-ка писаны на дельфи/vcl, так что использование bpl, а не dll никак не ухудшит совместимость. Хотя, как говорится, каждому каждое, кто как хочет, так и пишет ))
Автор: Frodo_Torbins
Дата сообщения: 26.03.2010 20:38
AviDen
Имелось ввиду, что расширение dll-ки останется. А так в принципе никакой разницы.
Автор: Aleksandr N
Дата сообщения: 27.03.2010 01:33
Никто не знает как в Toolbar2000+TBX сделать зазор между кнопками на TBXToolbar?
Целый день вожусь, а место где это описано не нашел.

Нормальные герои всегда идут в обход!
Пошел методом изменения способа прорисовки.
Автор: V1s1ter
Дата сообщения: 27.03.2010 15:37
Aleksandr N
Я давно им пользовался, но там есть что-то типа Separator. его нужно добавить и задать режим прорисовки, либо пробел, либо вертикальная черта.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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