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

Вниз

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 вся ветка

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

Наверх





Память: 0.51 MB
Время: 0.004 c
15-1309277924
tesseract
2011-06-28 20:18
2011.10.30
пивная тема.


15-1309552203
Юрий
2011-07-02 00:30
2011.10.30
С днем рождения ! 2 июля 2011 суббота


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


2-1310478941
начинающий95
2011-07-12 17:55
2011.10.30
какого типа сделать переменную


2-1310461223
Abibas
2011-07-12 13:00
2011.10.30
Вопрос по keybd_event





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский