Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться с компонентами   Найти похожие ветки 

 
Maloric   (2006-03-02 20:37) [0]

Добрый вечер!
Никак не могу понять как сделать компонент.
У меня есть визуальный компонент от предка TMemo,
как сделать такой же для Kol и Mck. Может я наконец разбирусь как их создавать.

interface
uses  Windows, Messages, SysUtils, Classes, Controls, StdCtrls;
type
 TFileMemo = class(TMemo)
 private
   FFileName: string;
   FCrypt: boolean;
   procedure Shifr(var s: string);
   procedure DeShifr(var s: string);
 protected
 public
       procedure Load;
       procedure Save;
 published
       constructor Create(aOwner:TComponent); override;
       property FileName:string read FFileName write FFileName;
       property Crypt:boolean read FCrypt write FCrypt;
 end;
procedure Register;
implementation
procedure Register;
begin
 RegisterComponents("Maloric", [TFileMemo]);
end;
constructor TFileMemo.Create(aOwner:TComponent);
begin
    inherited create(Aowner);
end;
procedure TFileMemo.Shifr(var s:string);
begin
{процедура шифровния}
end;
procedure TFileMemo.DeShifr(var s:string);
{процедура расшифровки}
end;
procedure TFileMemo.Load;
var f1:System.text;
    s:string;
begin
    if FFileName<>"" then begin
    Lines.Clear;
    WordWrap:=false;
    AssignFile(f1,FFileName);
    ReSet(f1);
    while not eof(f1) do begin
                  ReadLn(f1,s);
                  DeShifr(s);
                  Lines.Add(s);
                  end;
    CloseFile(f1);
    end;
end;
procedure TFileMemo.Save;
var f1:System.text;
   s:string;
   i:integer;
begin
    if FFileName<>"" then begin
    AssignFile(f1,FFileName);
    Rewrite(f1);
    for i:=0 to Lines.Count-1 do begin
      s:=Lines[i];
      Shifr(s);
      WriteLn(f1,s);
    end;
    CloseFile(f1);
    end;
end;
end.



 
ecm ©   (2006-03-02 22:28) [1]

Читаем, разбираемся, применяем полученные знания:
http://bonanzas.rinet.ru/art003.htm
http://bonanzas.rinet.ru/WritingComp.htm
http://www.kolnmck.ru/lessons/createcomp1.shtml
и скоро должно(или уже?) появится в книге
http://bonanzas.rinet.ru/KOLBook.rar
:))


 
ECM ©   (2006-03-02 23:05) [2]

з.ы.
ИМХО для этого случая - я бы не создавал наследника Memo. Лучше взять стандартный, а для чтения-записи (шифровки-дешифровки) создал бы специальный CryptFileStream при помощи _NewStream , где и определил процедуры (StreamMethods) для шифрованного доступа


 
z007   (2006-03-03 00:09) [3]

Какой вопрос - такой ответ:


unit KOL_CryptMem;

//KOL Control CopyLeft (c)2006 z007

interface
uses kol;

type

   PCryptMemo=^TCryptMemo;
   TKOLCryptMemo = PCryptMemo;
   TCryptMemo = object (TControl)
   public
   function Load(aFileName: string; doCrypt: boolean): boolean;
   function Save(aFileName: string; doCrypt: boolean): boolean;
   end;
implementation

function TCryptMemo.Load(aFileName: string; doCrypt: boolean): boolean;
var S : String;
   i : integer;
begin
   {Sample :)}
   Result:=False;
   if not doCrypt then exit;
   S:=StrLoadFromFile(aFileName);
   for i:=1 to Length(S) do
       if not (ord(S[i]) in [0, 1, 13, 14,  10,  11,  255]) then
           S[i]:=Chr(Ord(S[i]) - 1);
   Text:=S;
   Result:=True;
end;

function TCryptMemo.Save(aFileName: string; doCrypt: boolean): boolean;
var S : String;
   i : integer;
begin
   {Sample :)}
   Result:=False;
   if not doCrypt then exit;
   S:=Text;
   for i:=1 to Length(S) do
       if not (ord(S[i]) in [0, 13, 12,  10,  9,  254, 255]) then
           S[i]:=Chr(Ord(S[i]) + 1);
   StrSaveToFile(aFileName, S);
   Result:=True;
end;

end.

unit mckCryptMemo;
//MCK Mirror Control CopyLeft (c)2006 z007
interface
uses kol, mckCtrls, KOL_CryptMem, mckObjs, mirror,  Classes;
type
 TKOLCryptMemo = class(TKOLMemo)
 protected
   function AdditionalUnits: string;override;
   procedure SetupFirst(SL: TStringList; const AName, AParent, Prefix: String); override;
   procedure SetupConstruct(SL: TStringList; const AName, AParent,
     Prefix: String); override;
 end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents("Maloric", [TKOLCryptMemo]);
end;

function TKOLCryptMemo.AdditionalUnits: string;
begin
   result := inherited AdditionalUnits + ", KOL_CryptMem"
end;

procedure TKOLCryptMemo.SetupConstruct(SL: TStringList; const AName,
 AParent, Prefix: String);
var S: String;
begin
{
 asm
   jmp @@e_signature
   DB "#$signature$#", 0
   DB "TKOLCustomControl.SetupConstruct", 0
 @@e_signature:
 end;
}
 S := GenerateTransparentInits;
 SL.Add( Prefix + AName + " := PCryptMemo( New" + TypeName + "( "
         + SetupParams( AName, AParent ) + " )" + S + ");" );

end;

procedure TKOLCryptMemo.SetupFirst;
begin
inherited;
end;

end.

Unit1
<...>
const fn="c:\kol\dem~o\mm.txt";

procedure TForm1.ButtonSave(Sender: PObj);
begin
cm.Save(fn, true);
end;

procedure TForm1.ButtonLoad(Sender: PObj);
begin
if fileexists(fn) then
cm.Load(fn, true);
end;
<...>


 
z007   (2006-03-03 00:10) [4]

2 ECM:
А не приведет ли создание для этого CryptFileStream к излишнему увеличению кода?


 
Владимир Кладов   (2006-03-03 06:34) [5]

Может и приведет. Создание наследника обычно приводит к добавлению в код программы еще одного экземпляра vmt. Кажется, даже в случае, если нет новых виртуальных методов. Хотя в этом случае я могу ошибаться, и еще это может зависеть от версии Delphi. В любом случае дешевле добавить пару глобальных функций, а не методов. Какой прок в создании целого объектного типа или класса? Если кроме этих двух новых методов ничего не добавляется. Зато при наличии глобадбных функций у вас появится возможность использовать их и для rich edit, и для какого-либо гораздо более богатого потенциального наследника edit/memo/rich, если он кем-то будет сделан.


 
Maloric   (2006-03-03 11:14) [6]

z007
Интересный пример, спасибо.
Но вот только, ошибка при установке, компонента z007
[Error] Never-build package "CryptMemoD6" requires always-build package "MirrorKOLPackageD6"


 
ECM ©   (2006-03-03 11:25) [7]

Откройте пакет MirrorKOLPackageD6, в опциях проекта установите "Explicit rebuild" и пересоберите его...


 
Maloric   (2006-03-03 11:27) [8]

Извините, проблему нашел, изменил опции компилятора как написанно в Faq-е.

И все таки

> http://bonanzas.rinet.ru/WritingComp.htm
> http://www.kolnmck.ru/lessons/createcomp1.shtml

не очень понятно изложенно все. Надо хотя бы добавить простейший пример, а то я написал компонент у меня текста вышло в два раза больше чем у z007, и не работает.
Спасибо.


 
ECM ©   (2006-03-03 11:50) [9]


> не очень понятно изложенно все. Надо хотя бы добавить простейший
> пример

Возьметесь за написание простого примера и ясной и понятной статьи к нему?
С удовольствием помещу её на kolnmck.ru :))


 
z007   (2006-03-04 19:34) [10]

Возьмусь. Какой объем? Куда слать?


 
MTsv DN ©   (2006-03-04 20:02) [11]

Привет...

[i]> Возьмусь. Какой объем? Куда слать?[/i]
ECM или мне...
Объем, думаю, любой... Самое главное, чтобы было понятно, просто и "без воды"...

С Уважением MTsv DN



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
2-1164710988
Steep
2006-11-28 13:49
2006.12.17
Автологон


2-1164880618
ANB
2006-11-30 12:56
2006.12.17
Как из GUI приложения на делфи вернуть результат в ОС ?


2-1164620687
Werka
2006-11-27 12:44
2006.12.17
Как рассортировать?


15-1164540601
Nic
2006-11-26 14:30
2006.12.17
Nokia N70 (or N72) vs SE K750 (or K790 or W810)


2-1164645290
Okey
2006-11-27 19:34
2006.12.17
String to PChar <>





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский