Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

KOL и Классы


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо