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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение Des » 02.12.2015 20:30:00

подскажите как создать свою каретку в 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;

В лазарусе точно такой же код не работает, каретка просто не появляется и не мигает, подскажите в чем проблема?
Des
новенький
 
Сообщения: 22
Зарегистрирован: 20.07.2015 17:53:08

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

Сообщение Vadim » 03.12.2015 04:36:27

Des
Где-то я уже видел про такую проблему. Попробуйте функцией LoadBitmap() просто загрузить готовую картинку из ресурсов программы (я так понял, картинка у Вас уже есть готовая).
И не забывайте проверять, что у Вас получается в CaretBmp. ;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Des » 03.12.2015 18:51:53

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

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

Сообщение Vadim » 04.12.2015 10:33:24

Des писал(а):проект на линуксе если что

Ага! Вот Вы и попались! :-D
CreateBitmap - это функция WinAPI (как и CreateCaret), ни с какого перепугу она в Linux не появится.
В Qt, по-моему, есть аналогичная функция. Если Ваш интерфейс построен на Qt, можно попробовать.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Des » 04.12.2015 17:03:56

там есть функции эмулирующие функции вин апи в модуле LCLIntf, и там в winapih.inc
Des
новенький
 
Сообщения: 22
Зарегистрирован: 20.07.2015 17:53:08

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

Сообщение qivi » 04.12.2015 17:52:16

Сейчас правда на работе, так что проверил только под винду... вот это работает:

Код: Выделить всё
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. 
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение Des » 04.12.2015 20:34:54

qivi писал(а):Сейчас правда на работе, так что проверил только под винду... вот это работает:

не работает такой вариант на линкусе
Des
новенький
 
Сообщения: 22
Зарегистрирован: 20.07.2015 17:53:08

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

Сообщение qivi » 04.12.2015 22:09:29

Des писал(а):не работает такой вариант на линкусе


Да не работает... а жаль, мне тут то же каретку надо... ну ладно буду по своему первоначальному варианту со стороны рендера изголяться.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

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

Сообщение WAYFARER » 05.12.2015 09:09:01

Я еще лет 5-6 назад в багтрэкере тикет видел на эту тему
Аватара пользователя
WAYFARER
энтузиаст
 
Сообщения: 537
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru