Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.04.2008, 15:33
Аватар для Karapuz
Karapuz Karapuz вне форума
Прохожий
 
Регистрация: 10.04.2008
Сообщения: 16
Репутация: 5
По умолчанию Создание электронного учебника

Здрасть всем!
Я полный чайник в делфи(тока я не БЛОНДИНКА) , по этому я здесь!
Создаю электронный учебник и мне его нужно защитить поролем!
как это сделать?

Если на этот вопрос нет ответа, то другой....
Мне нужно на форму дабавить страницу лекций с рисунком, как это делать?
Если дабавляешь richEdit то картинки нет, а если отдельно вставляешь картинку, то она становиться на задний план и отличается от текста, можно как - нить сделать, чтобы все было сразу???
Спасибо всем большое!
__________________
Есть только два мнения: "МОЕ и не правильное"
Ответить с цитированием
  #2  
Старый 25.04.2008, 16:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Смотря как жестко ты хочешь использовать пароль. Если просто доступ - то надо хранить в системе хеш правильного пароля. При вводе пароля пользователем ты строишь хеш введенного пароля и сравниваешь его с хешем правильного. По результатам сравнения делаешь заключение о возможности продолжения работы. Если ты хочешь защититься более надежно, то тогда паролем шифруются данные (симетричное шифрование). При вводе пароля пользователем надо расшифровать данные, потом посчитать их контрольную сумму и сравнить с эталонной. Расшифровывать, ес-но, надо в памяти.

2. По второму вопросу есть 2 варианта решения. Первый - написать расширение для вставки картинок в ричедит. Работы - 10 минут поиска в гугле и 5 минут на прикручивние у себя в программе. Второй вариант - использовать HTML и соотв. компонент.
Ответить с цитированием
  #3  
Старый 25.04.2008, 16:12
Аватар для Karapuz
Karapuz Karapuz вне форума
Прохожий
 
Регистрация: 10.04.2008
Сообщения: 16
Репутация: 5
По умолчанию

Цитата:
Сообщение от lmikle
Второй вариант - использовать HTML и соотв. компонент.

так уже пробовала, устанавливаю компанент webBrowser, а мне пишут "No property pages are availablefor this control"

незнаю, что делать!
__________________
Есть только два мнения: "МОЕ и не правильное"
Ответить с цитированием
  #4  
Старый 25.04.2008, 16:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А какая проперти пэйдж нужна ему???
Там большая проблема с тем, что бы заставить его читать страницу из памяти, а не с диска. Что-то у тебя с ккими-то компонентами на машине не в порядке.

Ну тогда пробуй 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  
Старый 29.04.2008, 06:05
Web-orion Web-orion вне форума
Прохожий
 
Регистрация: 22.04.2008
Сообщения: 3
Репутация: 10
По умолчанию

Сделанная программа:
http://www.delphisources.ru/forum/showthread.php?t=4126
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter