Страница 1 из 1

Создание своей каретки

СообщениеДобавлено: 02.12.2015 20:30:00
Des
подскажите как создать свою каретку в lazarus. в Delphi я создаю ее так:


procedure TForm7.FormCreate(Sender: TObject);
begin
CaretBmp:=TBitmap.Create;
CaretBmp.Height:=10;
CaretBmp.Width:=10;
CaretBmp.Canvas.Brush.Color:=clRed;
CaretBmp.Canvas.FillRect(Rect(0,0,10,10));
end;

procedure TForm7.Button1Click(Sender: TObject);
var
cw,ch:integer;
begin
cw := CaretBmp.Width;
ch := CaretBmp.Height;
CreateCaret(Handle, CaretBmp.Handle, cw, ch);
SetCaretPos(50,100);
ShowCaret(Handle);
end;

В лазарусе точно такой же код не работает, каретка просто не появляется и не мигает, подскажите в чем проблема?

Re: Создание своей каретки

СообщениеДобавлено: 03.12.2015 04:36:27
Vadim
Des
Где-то я уже видел про такую проблему. Попробуйте функцией LoadBitmap() просто загрузить готовую картинку из ресурсов программы (я так понял, картинка у Вас уже есть готовая).
И не забывайте проверять, что у Вас получается в CaretBmp. ;-)

Re: Создание своей каретки

СообщениеДобавлено: 03.12.2015 18:51:53
Des
да на другом форуме мне подсказали что нужно через loadbitmap или createbitmap, но у меня все равно ничего не выходит, каретка не отображается. Может кто нибудь пришлет мне полный код с createbitmap, который отобразит каретку? проект на линуксе если что

Re: Создание своей каретки

СообщениеДобавлено: 04.12.2015 10:33:24
Vadim
Des писал(а):проект на линуксе если что

Ага! Вот Вы и попались! :-D
CreateBitmap - это функция WinAPI (как и CreateCaret), ни с какого перепугу она в Linux не появится.
В Qt, по-моему, есть аналогичная функция. Если Ваш интерфейс построен на Qt, можно попробовать.

Re: Создание своей каретки

СообщениеДобавлено: 04.12.2015 17:03:56
Des
там есть функции эмулирующие функции вин апи в модуле LCLIntf, и там в winapih.inc

Re: Создание своей каретки

СообщениеДобавлено: 04.12.2015 17:52:16
qivi
Сейчас правда на работе, так что проверил только под винду... вот это работает:

Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,LCLIntf;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateCaret(self.Handle,0,6,40);
  SetCaretPos(100,100);
  ShowCaret(self.Handle);
end;

end. 

Re: Создание своей каретки

СообщениеДобавлено: 04.12.2015 20:34:54
Des
qivi писал(а):Сейчас правда на работе, так что проверил только под винду... вот это работает:

не работает такой вариант на линкусе

Re: Создание своей каретки

СообщениеДобавлено: 04.12.2015 22:09:29
qivi
Des писал(а):не работает такой вариант на линкусе


Да не работает... а жаль, мне тут то же каретку надо... ну ладно буду по своему первоначальному варианту со стороны рендера изголяться.

Re: Создание своей каретки

СообщениеДобавлено: 05.12.2015 09:09:01
WAYFARER
Я еще лет 5-6 назад в багтрэкере тикет видел на эту тему