Конференция "KOL" » KOL и Классы
 
  • codemaster © (29.03.09 20:14) [0]
    Недавно скачал KOL.Pas и сразу возник возможно глупый вопрос: Как преобразовать object в class? С Классами поудобней работать, а с объектами чёрт и что не получается нифига.
  • MTsv DN (29.03.09 20:35) [1]
    Тогда используйте VCL. KOL- Key Object Library - от классов специально отказались...
  • CodeMaster © (29.03.09 20:41) [2]
    С Объектами я разобрался, теперь возник другой вопрос: В Кол Есть Аналог TCustomControl?
  • MTsv DN (29.03.09 22:02) [3]
    PControl?
  • SPeller © (30.03.09 02:44) [4]
    Работай с классами, кто мешает? KOL не замена VCL, функционал KOL можно использовать в VCL (я opendirdialog постоянно так пользую).
  • SPeller © (30.03.09 02:44) [5]
    Только при использовании VCL не спрашивай как размер уменьшить )
  • CodeMaster © (30.03.09 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 © (30.03.09 13:16) [7]
    function NewImage(AParent: Pcontrol): Pimage;
    перед Implementation
  • MTsv DN (30.03.09 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 (30.03.09 16:04) [9]
    > Попробовал наклипать компонент TImage при выходе из программы выдаётся ошибка: Invalid Pointer.
    У меня такого нету. Все нормально создается и уничтожается. А это:
    Canvas.Handle:= DC;


    зачем?
  • MTsv DN (30.03.09 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 (30.03.09 16:10) [11]
    Хотя это ненужный код. Кидаете просто панель на форма и в OnPaint извращаетесь как угодно...
  • MTsv DN (30.03.09 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 © (30.03.09 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 (30.03.09 17:00) [14]
    Мой последний код посмотрите...
  • CodeMaster © (30.03.09 17:02) [15]
    MTsv DN   (30.03.09 16:51) [12]
    Большое спасибо, больше вопросов пока не возникает.
  • MTsv DN (30.03.09 17:03) [16]
    На здоровье.

    А книжку скачайте...не помещает. Не на все вопросы ответы есть, но на многие...
  • CodeMaster © (30.03.09 17:49) [17]
    Заметил одну фишку, если форме назначить HasBorder = False то при нажатии правой кнопкой на приложении не вылетает контекстное окно. Как с этим бороться?: =)
  • CodeMaster © (30.03.09 17:50) [18]
    *на приложении в панели задач*
  • Vladimir Kladov © (30.03.09 18:38) [19]
    если форме назначить HasBorder = False то при нажатии правой кнопкой на приложении не вылетает контекстное
    окно. Как с этим бороться? ---- не использовать HasBorder, а использовать SetWindowRegion
 
Конференция "KOL" » KOL и Классы
Есть новые Нет новых   [134431   +15][b:0][p:0.002]