Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как создать каретку своей собственной формы

Delphi , ОС и Железо , Мышка и Курсор



Автор: http://www.swissdelphicenter.ch

{
  The example below demonstrates creating custom caret:
}

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Image1: TImage;
    Edit1: TEdit;
    procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  CreateCaret(Memo1.Handle, Image1.Picture.Bitmap.Handle, 0, 0);
  ShowCaret(Memo1.Handle);
end;

procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  CreateCaret(Edit1.Handle, 0, 10, 4);
  ShowCaret(Edit1.Handle);
end;

end.
{The form file source (*.dfm) }

  object Form1: TForm1
    Left = 192
    Top = 107
    Width = 544
    Height = 375
    Caption = 'Form1'
    Color = clBtnFace
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    OldCreateOrder = False
    PixelsPerInch = 96
    TextHeight = 13
    object Image1: TImage
      Left = 12
      Top = 4
      Width = 16
      Height = 16
      AutoSize = True
      Picture.Data = {  
      07544269746D6170B6020000424DB602000000000000B6000000280000001000  
      0000100000000100100000000000000200000000000000000000100000000000  
      000000000000000080000080000000808000800000008000800080800000C0C0  
      C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFF  
      FF00000000000000000000000000000000000000000000000000000000000000  
      0000000000000000000000000000000000000000000000000000000000000000  
      000000000000FF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7FFF7F  
      00000000FF7FFF7FFF7FFF7F000000000000FF7FFF7FFF7FFF7FFF7FFF7F0000  
      0000FF7FFF7FFF7FFF7FFF7F00000000FF7FFF7FFF7FFF7FFF7FFF7FFF7F0000  
      000000000000FF7FFF7FFF7F0000000000000000FF7FFF7FFF7FFF7F00000000  
      0000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F00000000  
      0000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F000000000000  
      0000000000000000FF7FFF7FFF7F00000000FF7FFF7FFF7FFF7F000000000000  
      00000000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7F0000000000000000  
      00000000000000000000FF7FFF7FFF7FFF7FFF7FFF7FFF7F0000000000000000  
      000000000000000000000000FF7FFF7FFF7FFF7FFF7FFF7F0000000000000000  
      000000000000000000000000FF7FFF7FFF7FFF7FFF7F00000000000000000000  
      0000000000000000000000000000FF7FFF7FFF7FFF7F00000000000000000000  
      0000000000000000000000000000FF7FFF7FFF7F000000000000000000000000  
      00000000000000000000000000000000FF7F0000000000000000000000000000  
      0000}
    end
    object Memo1: TMemo
      Left = 12
      Top = 36
      Width = 149
      Height = 149
      Lines.Strings = ('Memo1')
      TabOrder = 0
      OnMouseDown = Memo1MouseDown
    end
    object Edit1: TEdit
      Left = 220
      Top = 60
      Width = 121
      Height = 21
      TabOrder = 1
      Text = 'Edit1'
      OnMouseDown = Edit1MouseDown
    end
  end

Приведенный код - пример создания пользовательского курсора (caret) в Delphi. Курсор обычно используется для указания позиции вставки в текстовом контроле, таком как TMemo или TEdit. В этом примере созданы два курсора: один для TMemo (назван Memo1) и другой для TEdit (назван Edit1).

Вот шаг за шагом, как это работает:

  1. Курсор создается с помощью функции CreateCaret, которая принимает три параметра: handle окна, в котором будет отображаться курсор, битмап для курсора и начальную позицию курсора.
  2. В процедуре Memo1MouseDown создается курсор с изображением (представленным контролем Image1) как его битмапом, а его начальная позиция установлена в (0, 0) (т.е., верхнем-левом углу окна).
  3. В процедуре Edit1MouseDown создается курсор с пустым битмапом (т.е., он будет простой вертикальной линией), а его начальная позиция установлена в (10, 4) (т.е., на 10 пикселей от левого края и на 4 пикселя от верхнего края окна).
  4. После создания курсоров вызывается функция ShowCaret с handle окна, в котором будет отображаться курсор, как аргументом. Это сделает курсор видимым.

Обратите внимание, что это код предполагает, что изображение, используемое для курсора (в этом случае, Image1), имеет прозрачный фон и достаточно большого размера, чтобы покрыть всю ширину окна. Если вы хотите использовать другой битмап или создать пользовательский курсор, вам нужно будет модифицировать код соответствующим образом.

Вот некоторые предложения по улучшению кода:

  • Вместо жесткого кодирования позиции и размера курсораconsider using properties or methods to make it more flexible and reusable.
  • Вы можете добавить обработку ошибок для обеспечения успешности вызовов CreateCaret и ShowCaret.
  • Если вы планируете использовать этот код в многопоточной среде, убедитесь, что синхронизируете доступ к созданию курсора и отображению процессов.
  • В целом, это пример предоставляет основное демонстрирование создания пользовательских курсоров в Delphi. С некоторыми модификациями и улучшениями он может быть использован как начальный пункт для более сложных реализаций курсоров.

Как создать каретку своей собственной формы для Memo и Edit компонентов в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Мышка и Курсор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-17 19:42:54/0.0037851333618164/0