Конференция "Начинающим" » Всплывающая подсказка с возможностью копирования текста
 
  • Саня © (18.09.18 23:16) [0]
    Буду признателен за любую информацию по САБЖу. Может существуют  готовые компоненты? Или хотя-бы найти теорию реализации
  • sniknik © (19.09.18 10:20) [1]
    вообще это уже будет не подсказка, т.к. на нее для копирования нужно перейти, мышкой/клавишами выделить, окно должно "держатся", а не как у обычной подсказки закрываться/меняться по контексту... неудобно.
    проще определить в программе сочетание клавиш по которому и заносить в буфер подсказку с элемента "под мышкой", ну или тупо последнюю показанную, что проще в реализации, удобнее и не требует специальных компонент.
  • KSergey © (19.09.18 11:26) [2]
  • KSergey © (19.09.18 11:28) [3]
    Вот только проблемы, указанные в [1] всё одно объезжать придётся, с болью
    Хотя в плане логичности пользовательского использования - проблем не вижу, идея интересная
  • virex(home) © (19.09.18 11:33) [4]

    unit Unit1;

    interface

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

    type
     TForm1 = class(TForm)
       Button1: TButton;
       procedure Button1Click(Sender: TObject);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    type TMyHint = class(THintWindow)
     private
     public
       procedure Show(text: string);
       procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
       procedure WMLBTNDOWN(var Message: TMessage); message WM_LBUTTONDOWN;
       procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    var HintWindow: TMyHint;
    begin
     HintWindow := TMyHint.Create(Self);
     HintWindow.Show('long text');
    end;

    { TMyHint }

    //говорим окну что-бы сам обрабатывал сообщения
    procedure TMyHint.WMNCHitTest(var Message: TWMNCHitTest);
    begin
     Message.Result := HTCLIENT;
    end;

    //мышь уходит за пределы окна
    //закрываем хинт
    procedure TMyHint.CMMouseLeave(var Message: TMessage);
    begin
     ReleaseHandle;
    end;

    //нажатие левой кнопки мыши
    procedure TMyHint.WMLBTNDOWN(var Message: TMessage);
    begin
    //копируем в буфер обмена
     Clipboard.SetTextBuf(PChar(Caption));
     ReleaseHandle;
    end;

    //отображаем хинт
    procedure TMyHint.Show(text: string);
    var
     HintPosition: TRect;
    begin
     HintPosition.Left := Mouse.CursorPos.X - 10;
     HintPosition.Top := Mouse.CursorPos.Y - 10;
     HintPosition.Right := Mouse.CursorPos.X + 200;
     HintPosition.Bottom := Mouse.CursorPos.Y + 70;
     ActivateHint(HintPosition, text);
    end;

    end.
  • Саня © (19.09.18 12:01) [5]
    Спасибо, буду пробовать.
  • KSergey © (20.09.18 11:03) [6]
    > //нажатие левой кнопки мыши
    > procedure TMyHint.WMLBTNDOWN(var Message: TMessage);
    > begin
    > //копируем в буфер обмена
    >   Clipboard.SetTextBuf(PChar(Caption));
    >   ReleaseHandle;
    > end;
    >  

    Я правильно понимаю, что при клике мышью текст скопируется - и окно исчезнет?
    Или ReleaseHandle - это не про исчезновение, а про другое?
  • virex(home) © (20.09.18 11:53) [7]

    > Я правильно понимаю, что при клике мышью текст скопируется
    > - и окно исчезнет?
    > Или ReleaseHandle - это не про исчезновение, а про другое?
    >

    исчезновение
    иначе хинт не закроется
  • QT (26.09.18 08:49) [8]
    В редакторе кода Делфи как раз такая... %)
  • Саня © (28.09.18 19:28) [9]
    А этот хинт подлежит "извращениям"? В общем нужно следующее:  

    1) хинт всегда фиксированной ширины, пусть 300пх
    2) происходит авто перенос длинного текста на новую строку.
    3) AutoSize по высоте.
  • Германн © (29.09.18 02:24) [10]

    >  Саня ©   (28.09.18 19:28) [9]
    >
    > А этот хинт

    А самому попробовать этот "хинт" влом?
    А после пробы сказать что не устраивает, и если не устраивает.
 
Конференция "Начинающим" » Всплывающая подсказка с возможностью копирования текста
Есть новые Нет новых   [134427   +35][b:0][p:0]