Создание своей каретки
Добавлено:
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 писал(а):проект на линуксе если что
Ага! Вот Вы и попались!
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 назад в багтрэкере тикет видел на эту тему