Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.30;
Скачать: CL | DM;

Вниз

KOL и Классы   Найти похожие ветки 

 
codemaster ©   (2009-03-29 20:14) [0]

Недавно скачал KOL.Pas и сразу возник возможно глупый вопрос: Как преобразовать object в class? С Классами поудобней работать, а с объектами чёрт и что не получается нифига.


 
MTsv DN   (2009-03-29 20:35) [1]

Тогда используйте VCL. KOL- Key Object Library - от классов специально отказались...


 
CodeMaster ©   (2009-03-29 20:41) [2]

С Объектами я разобрался, теперь возник другой вопрос: В Кол Есть Аналог TCustomControl?


 
MTsv DN   (2009-03-29 22:02) [3]

PControl?


 
SPeller ©   (2009-03-30 02:44) [4]

Работай с классами, кто мешает? KOL не замена VCL, функционал KOL можно использовать в VCL (я opendirdialog постоянно так пользую).


 
SPeller ©   (2009-03-30 02:44) [5]

Только при использовании VCL не спрашивай как размер уменьшить )


 
CodeMaster ©   (2009-03-30 13:15) [6]

Попробовал наклипать компонент TImage при выходе из программы выдаётся ошибка: Invalid Pointer.
type
PImage = ^TImage;
TImage = object(TControl)
private
 FBitmap: PBitmap;
 procedure Paint(Sender: PControl; DC: HDC);
public
 destructor Destroy; virtual;
 property Bitmap: PBitmap read FBitmap write FBitmap;

end;

function NewImage(AParent: PControl): PPOGiImage;
implementation

destructor TImage.Destroy;
begin
 FBitmap^.Free;

 inherited;
end;
procedure TImage.Paint(Sender: PControl; DC: HDC);
begin
 FBitmap^.Draw(DC,0,0);
 Canvas.Handle:= DC;
end;
function NewImage(AParent: PControl): PImage;
begin
Result:= PImage(NewPanel(AParent,esNone));
Result.FBitmap:= NewBitmap(0,0);
Result.OnPaint:= Result.Paint;

end;

Нужно что-то в Destroy указать?


 
CodeMaster ©   (2009-03-30 13:16) [7]

function NewImage(AParent: Pcontrol): Pimage;
перед Implementation


 
MTsv DN   (2009-03-30 15:59) [8]

2 CodeMaster
А зачем колесо то изобретать 8) Есть визуальный MCK компонент PaintBox. Если MCK не используете, то создаете объект вречную:
function NewPaintbox( AParent: PControl ): PControl;

Посмотрите в KOL.PAS, там все написано. А еще почитайте KOLBook, скачать можно здесь: http://kolmck.net/docs/KOLBook.rar


 
MTsv DN   (2009-03-30 16:04) [9]

> Попробовал наклипать компонент TImage при выходе из программы выдаётся ошибка: Invalid Pointer.
У меня такого нету. Все нормально создается и уничтожается. А это:
Canvas.Handle:= DC;
зачем?


 
MTsv DN   (2009-03-30 16:09) [10]

вот 100% рабочий код:
type
PImage = ^TImage;
TImage = object(TControl)
private
 fFileName : AnsiString;
 FBitmap: PBitmap;
 procedure Paint(Sender: PControl; DC: HDC);
public
 destructor Destroy; virtual;
 property Bitmap: PBitmap read FBitmap write FBitmap;
 property FileName: AnsiString read fFileName write fFileName;
end;

function NewImage(AParent: PControl; FileName : AnsiString): PImage;

implementation

destructor TImage.Destroy;
begin
FBitmap^.Free;
inherited;
end;

procedure TImage.Paint(Sender: PControl; DC: HDC);
begin
FBitmap^.Draw(DC, 0, 0);
end;

function NewImage(AParent: PControl; FileName : AnsiString): PImage;
begin
Result:= PImage(NewPanel(AParent,esTransparent));
Result.Transparent := true;
Result.fFileName := FileName;
Result.FBitmap := NewBitmap(0,0);
Result.FBitmap.LoadFromFile(Result.fFileName);
Result.OnPaint:= Result.Paint;
end;

procedure TForm1.KOLFormFormCreate(Sender: PObj);
var
P : PImage;
begin
P := NewImage(Form, "test.bmp");
end;


 
MTsv DN   (2009-03-30 16:10) [11]

Хотя это ненужный код. Кидаете просто панель на форма и в OnPaint извращаетесь как угодно...


 
MTsv DN   (2009-03-30 16:51) [12]

А то, что Вы пытались сделать делается так...если где напартачил, думаю Комрады подправят:
type
PImage = ^TImage;
TImage = object(TControl)
private
 fFileName : AnsiString;
 FBitmap: PBitmap;
 procedure Paint(Sender: PControl; DC: HDC);
public
 destructor Destroy; virtual;
 property Bitmap: PBitmap read FBitmap write FBitmap;
 property FileName: AnsiString read fFileName write fFileName;
end;

function NewImage(AParent: PControl; FileName : AnsiString): PImage;

var
P : PImage;

implementation

destructor TImage.Destroy;
begin
FBitmap^.Free;
inherited;
end;

procedure TImage.Paint(Sender: PControl; DC: HDC);
begin
PImage(CustomObj)^.FBitmap^.Draw(DC, 0, 0);
end;

function NewImage(AParent: PControl; FileName : AnsiString): PImage;
var
D : PImage;
begin
Result := PImage(NewPanel(AParent, esNone));
New(D, Create);
Result.CustomObj := D;

D^.fFileName := FileName;
D^.FBitmap := NewBitmap(0, 0);
D^.FBitmap.LoadFromFile(D^.fFileName);

Result.SetSize(D^.FBitmap.Width, D^.FBitmap.Height);
Result.OnPaint := Result.Paint;
end;

procedure TForm1.KOLFormClose(Sender: PObj; var Accept: Boolean);
begin
P.Free;
end;

procedure TForm1.KOLFormFormCreate(Sender: PObj);
begin
P := NewImage(Applet, "test.bmp");
end;


 
CodeMaster ©   (2009-03-30 17:00) [13]

Это мой код dpr файла:

Applet := NewApplet("My Programm");

 MyForm := NewForm(nil,"My Programm");
 with MyForm^ do begin
   Width:= 100;
   Height:= 100;
   Left:= 100;
   Top:= 100;
   HasBorder:= True;
 end;

 Image:= NewImage(POGiForm);
 Image.Bitmap.LoadFromFile(ExtractFilePath(ParamStr(0)) + "Безымянный.bmp");

 run(MyForm);

После закрытия главное формы издаётся звук об ошибке, но окно с ошибкой не вылазиет. Если запустить проект не через Delphi, то после закрытия формы вылетает окно с сообщением: 0x000000..... Память не может быть "read".


 
MTsv DN   (2009-03-30 17:00) [14]

Мой последний код посмотрите...


 
CodeMaster ©   (2009-03-30 17:02) [15]

MTsv DN   (30.03.09 16:51) [12]
Большое спасибо, больше вопросов пока не возникает.


 
MTsv DN   (2009-03-30 17:03) [16]

На здоровье.

А книжку скачайте...не помещает. Не на все вопросы ответы есть, но на многие...


 
CodeMaster ©   (2009-03-30 17:49) [17]

Заметил одну фишку, если форме назначить HasBorder = False то при нажатии правой кнопкой на приложении не вылетает контекстное окно. Как с этим бороться?: =)


 
CodeMaster ©   (2009-03-30 17:50) [18]

*на приложении в панели задач*


 
Vladimir Kladov ©   (2009-03-30 18:38) [19]

если форме назначить HasBorder = False то при нажатии правой кнопкой на приложении не вылетает контекстное
окно. Как с этим бороться? ---- не использовать HasBorder, а использовать SetWindowRegion


 
CodeMaster ©   (2009-03-30 18:42) [20]

Полное описание функции SetWindowRegion можешь дать? А то у меня чёт компилятор ошибку выдаёт, грит такой функции не найдено.


 
MTsv DN   (2009-03-30 18:45) [21]

MSDN


 
CodeMaster ©   (2009-03-30 18:47) [22]

Заходил уже, всего 4 результата мне поиск показал и то чё то левое приведено в этих 4 статьях.


 
CodeMaster ©   (2009-03-30 18:52) [23]

Vladimir Kladov может вы имели ввиду?
SetWindowRgn


 
CodeMaster ©   (2009-03-30 18:55) [24]

Если использовать
 RGN:= CreateRectRGN(10,10,100,100);
 SetWindowRgn(MyForm^.Handle,RGN, true);

Не работает: :(


 
mdw ©   (2009-03-30 19:09) [25]


>  SetWindowRgn(MyForm^.Handle,RGN, true);

А MyForm^.Handle чему равен? не нулю случаем?
MyForm^.Handle -> MyForm^.GetwindowHandle


> А то, что Вы пытались сделать делается так...если где напартачил,
>  думаю Комрады подправят:

:)
Думаю еще проверку на наличие картинки нужно
procedure TImage.Paint(Sender: PControl; DC: HDC);
begin
if not PImage(CustomObj)^.FBitmap^.Empty then
PImage(CustomObj)^.FBitmap^.Draw(DC, 0, 0);
end;


 
CodeMaster ©   (2009-04-01 11:35) [26]

Оказывается чтобы убрать рамку нет ничего сложного, у формы нужно установить фляг 0


 
CodeMaster ©   (2009-04-01 11:45) [27]

Хотя нет если выставить флаг стиля 0 исчезнет системное меню, прочитав MSDN я пришёл к такому выводу:
MyForm^.Style:= WS_OVERLAPPED or WS_SYSMENU;

Работает ^)



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

Текущий архив: 2011.10.30;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.01 c
15-1309724999
Юрий
2011-07-04 00:29
2011.10.30
С днем рождения ! 4 июля 2011 понедельник


2-1310381051
leon2011
2011-07-11 14:44
2011.10.30
Помогите разобраться с TextOutW


15-1309527475
Chatnick
2011-07-01 17:37
2011.10.30
Ассоциация ICO-файла с программой.


2-1310368224
MVVD
2011-07-11 11:10
2011.10.30
Глюк DBChart


15-1309633372
eXAAAXe
2011-07-02 23:02
2011.10.30
Инвайт для ВКонтакта