![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Здрасть всем!
Я полный чайник в делфи(тока я не БЛОНДИНКА) , по этому я здесь!Создаю электронный учебник и мне его нужно защитить поролем! как это сделать? Если на этот вопрос нет ответа, то другой.... Мне нужно на форму дабавить страницу лекций с рисунком, как это делать? Если дабавляешь richEdit то картинки нет, а если отдельно вставляешь картинку, то она становиться на задний план и отличается от текста, можно как - нить сделать, чтобы все было сразу??? Спасибо всем большое! ![]() |
|
#2
|
|||
|
|||
|
1. Смотря как жестко ты хочешь использовать пароль. Если просто доступ - то надо хранить в системе хеш правильного пароля. При вводе пароля пользователем ты строишь хеш введенного пароля и сравниваешь его с хешем правильного. По результатам сравнения делаешь заключение о возможности продолжения работы. Если ты хочешь защититься более надежно, то тогда паролем шифруются данные (симетричное шифрование). При вводе пароля пользователем надо расшифровать данные, потом посчитать их контрольную сумму и сравнить с эталонной. Расшифровывать, ес-но, надо в памяти.
2. По второму вопросу есть 2 варианта решения. Первый - написать расширение для вставки картинок в ричедит. Работы - 10 минут поиска в гугле и 5 минут на прикручивние у себя в программе. Второй вариант - использовать HTML и соотв. компонент. |
|
#3
|
||||
|
||||
|
Цитата:
так уже пробовала, устанавливаю компанент webBrowser, а мне пишут "No property pages are availablefor this control" незнаю, что делать! |
|
#4
|
|||
|
|||
|
А какая проперти пэйдж нужна ему???
Там большая проблема с тем, что бы заставить его читать страницу из памяти, а не с диска. Что-то у тебя с ккими-то компонентами на машине не в порядке. Ну тогда пробуй RichEdit. Вот код, позволяющий вставить каринку в его: Код:
unit RTFWorks;
interface
uses Windows;
procedure InsertBitmapToRE(Wnd: HWND; Bmp: HBITMAP);
implementation
uses Activex, RichEdit;
const
IID_IDataObject: TGUID = (
D1: $0000010E; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46));
IID_IOleObject: TGUID = (
D1: $00000112; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46));
REO_CP_SELECTION = ULONG(-1);
REO_IOB_SELECTION = ULONG(-1);
REO_GETOBJ_POLEOBJ = $00000001;
type
TReobject = record
cbStruct: DWORD;
cp: ULONG;
clsid: TCLSID;
poleobj: IOleObject;
pstg: IStorage;
polesite: IOleClientSite;
sizel: TSize;
dvAspect: Longint;
dwFlags: DWORD;
dwUser: DWORD;
end;
type
IRichEditOle = interface(IUnknown)
['{00020d00-0000-0000-c000-000000000046}']
function GetClientSite(out clientSite: IOleClientSite): HResult; stdcall;
function GetObjectCount: HResult; stdcall;
function GetLinkCount: HResult; stdcall;
function GetObject(iob: Longint; out reobject: TReObject;
dwFlags: DWORD): HResult; stdcall;
function InsertObject(var reobject: TReObject): HResult; stdcall;
function ConvertObject(iob: Longint; rclsidNew: TIID;
lpstrUserTypeNew: LPCSTR): HResult; stdcall;
function ActivateAs(rclsid: TIID; rclsidAs: TIID): HResult; stdcall;
function SetHostNames(lpstrContainerApp: LPCSTR;
lpstrContainerObj: LPCSTR): HResult; stdcall;
function SetLinkAvailable(iob: Longint; fAvailable: BOOL): HResult; stdcall;
function SetDvaspect(iob: Longint; dvaspect: DWORD): HResult; stdcall;
function HandsOffStorage(iob: Longint): HResult; stdcall;
function SaveCompleted(iob: Longint; const stg: IStorage): HResult; stdcall;
function InPlaceDeactivate: HResult; stdcall;
function ContextSensitiveHelp(fEnterMode: BOOL): HResult; stdcall;
function GetClipboardData(var chrg: TCharRange; reco: DWORD;
out dataobj: IDataObject): HResult; stdcall;
function ImportDataObject(dataobj: IDataObject; cf: TClipFormat;
hMetaPict: HGLOBAL): HResult; stdcall;
end;
TImageDataObject = class(TInterfacedObject, IDataObject)
private
FBmp: HBITMAP;
FMedium: TStgMedium;
FFormatEtc: TFormatEtc;
procedure SetBitmap(bmp: HBITMAP);
function GetOleObject(OleClientSite: IOleClientSite; Storage: IStorage): IOleObject;
destructor Destroy; override;
// IDataObject
function GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult; stdcall;
function GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult; stdcall;
function QueryGetData(const formatetc: TFormatEtc): HResult; stdcall;
function GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult; stdcall;
function SetData(const formatetc: TFormatEtc; var medium: TStgMedium; fRelease: BOOL): HResult; stdcall;
function EnumFormatEtc(dwDirection: Longint; out enumFormatEtc: IEnumFormatEtc): HResult; stdcall;
function DAdvise(const formatetc: TFormatEtc; advf: Longint;
const advSink: IAdviseSink; out dwConnection: Longint): HResult; stdcall;
function DUnadvise(dwConnection: Longint): HResult; stdcall;
function EnumDAdvise(out enumAdvise: IEnumStatData): HResult; stdcall;
public
procedure InsertBitmap(wnd: HWND; Bitmap: HBITMAP);
end;
{ TImageDataObject }
function TImageDataObject.DAdvise(const formatetc: TFormatEtc; advf: Integer;
const advSink: IAdviseSink; out dwConnection: Integer): HResult;
begin
Result := E_NOTIMPL;
end;
function TImageDataObject.DUnadvise(dwConnection: Integer): HResult;
begin
Result := E_NOTIMPL;
end;
function TImageDataObject.EnumDAdvise(out enumAdvise: IEnumStatData): HResult;
begin
Result := E_NOTIMPL;
end;
function TImageDataObject.EnumFormatEtc(dwDirection: Integer; out enumFormatEtc: IEnumFormatEtc): HResult;
begin
Result := E_NOTIMPL;
end;
function TImageDataObject.GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult;
begin
Result := E_NOTIMPL;
end;
function TImageDataObject.GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult;
begin
Result := E_NOTIMPL;
end;
function TImageDataObject.QueryGetData(const formatetc: TFormatEtc): HResult;
begin
Result := E_NOTIMPL;
end;
destructor TImageDataObject.Destroy;
begin
ReleaseStgMedium(FMedium);
end;
function TImageDataObject.GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult;
begin
medium.tymed := TYMED_GDI;
medium.hBitmap := FMedium.hBitmap;
medium.unkForRelease := nil;
Result := S_OK;
end;
function TImageDataObject.SetData(const formatetc: TFormatEtc; var medium: TStgMedium; fRelease: BOOL): HResult;
begin
FFormatEtc := formatetc;
FMedium := medium;
Result := S_OK;
end;
procedure TImageDataObject.SetBitmap(bmp: HBITMAP);
var
stgm: TStgMedium;
fm: TFormatEtc;
begin
stgm.tymed := TYMED_GDI;
stgm.hBitmap := bmp;
stgm.UnkForRelease := nil;
fm.cfFormat := CF_BITMAP;
fm.ptd := nil;
fm.dwAspect := DVASPECT_CONTENT;
fm.lindex := -1;
fm.tymed := TYMED_GDI;
SetData(fm, stgm, FALSE);
end;
function TImageDataObject.GetOleObject(OleClientSite: IOleClientSite; Storage: IStorage): IOleObject;
begin
if (Fmedium.hBitmap = 0) then
Result := nil
else
OleCreateStaticFromData(self, IID_IOleObject, OLERENDER_FORMAT, @FFormatEtc, OleClientSite, Storage, Result);
end;
procedure TImageDataObject.InsertBitmap(wnd: HWND; Bitmap: HBITMAP);
var
OleClientSite: IOleClientSite;
RichEditOLE: IRichEditOLE;
Storage: IStorage;
LockBytes: ILockBytes;
OleObject: IOleObject;
reobject: TReobject;
clsid: TGUID;
begin
if (SendMessage(wnd, EM_GETOLEINTERFACE, 0, cardinal(@RichEditOle)) = 0) then
exit;
FBmp := CopyImage(Bitmap, IMAGE_BITMAP, 0, 0, 0);
if FBmp = 0 then
exit;
try
SetBitmap(Fbmp);
RichEditOle.GetClientSite(OleClientSite);
if (OleClientSite = nil) then
exit;
CreateILockBytesOnHGlobal(0, TRUE, LockBytes);
if (LockBytes = nil) then
exit;
if (StgCreateDocfileOnILockBytes(LockBytes, STGM_SHARE_EXCLUSIVE or STGM_CREATE or STGM_READWRITE, 0, Storage) <> S_OK) then
begin
LockBytes._Release;
exit
end;
if (Storage = nil) then
exit;
OleObject := GetOleObject(OleClientSite, Storage);
if (OleObject = nil) then
exit;
OleSetContainedObject(OleObject, TRUE);
ZeroMemory(@reobject, sizeof(TReobject));
reobject.cbStruct := sizeof(TReobject);
OleObject.GetUserClassID(clsid);
reobject.clsid := clsid;
reobject.cp := REO_CP_SELECTION;
reobject.dvaspect := DVASPECT_CONTENT;
reobject.poleobj := OleObject;
reobject.polesite := OleClientSite;
reobject.pstg := Storage;
RichEditOle.InsertObject(reobject);
finally
DeleteObject(FBmp)
end
end;
procedure InsertBitmapToRE(Wnd: HWND; bmp: HBITMAP);
begin
with TImageDataObject.Create do
try
InsertBitmap(Wnd, Bmp);
finally
Free
end
end;
end. |
|
#5
|
|||
|
|||
|
Сделанная программа:
http://www.delphisources.ru/forum/showthread.php?t=4126 |