Форум по 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,090
Версия 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,090
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

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

Ну тогда пробуй RichEdit. Вот код, позволяющий вставить каринку в его:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
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, время: 16:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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