Форум: "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