![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
KOL и Классы
codemaster © (2009-03-29 20:14:00)Недавно скачал KOL.Pas и сразу возник возможно глупый вопрос: Как преобразовать object в class? С Классами поудобней работать, а с объектами чёрт и что не получается нифига.
CodeMaster (2009-04-01 11:45:00) [1]Хотя нет если выставить флаг стиля 0 исчезнет системное меню, прочитав MSDN я пришёл к такому выводу:
MyForm^.Style:= WS_OVERLAPPED or WS_SYSMENU;
Работает ^)
CodeMaster (2009-04-01 11:35:00) [2]Оказывается чтобы убрать рамку нет ничего сложного, у формы нужно установить фляг 0
mdw (2009-03-30 19:09:00) [3]
> 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-03-30 18:55:00) [4]Если использовать
RGN:= CreateRectRGN(10,10,100,100);
SetWindowRgn(MyForm^.Handle,RGN, true);
Не работает: :(
CodeMaster (2009-03-30 18:52:00) [5]Vladimir Kladov может вы имели ввиду?
SetWindowRgn
CodeMaster (2009-03-30 18:47:00) [6]Заходил уже, всего 4 результата мне поиск показал и то чё то левое приведено в этих 4 статьях.
MTsv DN (2009-03-30 18:45:00) [7]MSDN
CodeMaster (2009-03-30 18:42:00) [8]Полное описание функции SetWindowRegion можешь дать? А то у меня чёт компилятор ошибку выдаёт, грит такой функции не найдено.
Vladimir Kladov (2009-03-30 18:38:00) [9]если форме назначить HasBorder = False то при нажатии правой кнопкой на приложении не вылетает контекстное
окно. Как с этим бороться? ---- не использовать HasBorder, а использовать SetWindowRegion
CodeMaster (2009-03-30 17:50:00) [10]*на приложении в панели задач*
CodeMaster (2009-03-30 17:49:00) [11]Заметил одну фишку, если форме назначить HasBorder = False то при нажатии правой кнопкой на приложении не вылетает контекстное окно. Как с этим бороться?: =)
MTsv DN (2009-03-30 17:03:00) [12]На здоровье.
А книжку скачайте...не помещает. Не на все вопросы ответы есть, но на многие...
CodeMaster (2009-03-30 17:02:00) [13]MTsv DN (30.03.09 16:51) [12]
Большое спасибо, больше вопросов пока не возникает.
MTsv DN (2009-03-30 17:00:00) [14]Мой последний код посмотрите...
CodeMaster (2009-03-30 17:00:00) [15]Это мой код 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 16:51:00) [16]А то, что Вы пытались сделать делается так...если где напартачил, думаю Комрады подправят:
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;
MTsv DN (2009-03-30 16:10:00) [17]Хотя это ненужный код. Кидаете просто панель на форма и в OnPaint извращаетесь как угодно...
MTsv DN (2009-03-30 16:09:00) [18]вот 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:04:00) [19]> Попробовал наклипать компонент TImage при выходе из программы выдаётся ошибка: Invalid Pointer.
У меня такого нету. Все нормально создается и уничтожается. А это:
Canvas.Handle:= DC;
зачем?
MTsv DN (2009-03-30 15:59:00) [20]2 CodeMaster
А зачем колесо то изобретать 8) Есть визуальный MCK компонент PaintBox. Если MCK не используете, то создаете объект вречную:
function NewPaintbox( AParent: PControl ): PControl;
Посмотрите в KOL.PAS, там все написано. А еще почитайте KOLBook, скачать можно здесь: http://kolmck.net/docs/KOLBook.rar