Ana içeriğe atla

HintInfo

Programın arabiriminde yer alan bazı bileşenlerin içerdikleri metin ekrana sığmayabiliyor. Kaydırma çubukları da gerekli esnekliği sağlıyamıyor. Böyle bir durumda hintleri kullanarak kullanıcıya metnin tamamını göstermek güzel bir davranış olabilir. Bu örneğimizde kullanıcı fareyle listbox üzerinde ki metinlerin üzerine geldiği zaman (metin listboxa sığmamışsa) metnin tam halini hint olarak kullanıcıya gösteriyor. Kodun orjinal hali hinti direkt olarak kendi üzerinde gösteriyordu. Hintin fareye göre konumlanması daha çok hoşuma gittiği için kod üzerinde bir kaç ufak değişiklik yaptım.

...
...
...

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ...
    ...  
  public
    procedure ShowHint(var HintStr: String; 
    var CanShow: Boolean; var HintInfo: THintInfo);
    { Public declarations }
  end;
...
...
...



procedure TForm1.ShowHint(var HintStr: String;
  var CanShow: Boolean; var HintInfo: THintInfo);
var
  MyItemIndex: Integer;
  MyString: String;
  MySize: TSize;
  MyPos: TPoint;
begin
  with HintInfo do
  begin
    if HintControl = ListBox1 then
    begin
      CanShow := False;
      MyItemIndex := ListBox1.ItemAtPos(
                     Point(CursorPos.X, 
                           CursorPos.Y), 
                     True);
      if MyItemIndex <> -1 then
      begin
        MyString := ListBox1.Items[MyItemIndex];
        GetTextExtentPoint32(ListBox1.Canvas.Handle,
                             PChar(MyString),
                             Length(MyString),
                             MySize);
        MyPos:= ListBox1.ScreenToClient(mouse.CursorPos);
        MyPos.Y := MyPos.Y - 20;
        if MySize.cx > ListBox1.ClientWidth then
        begin
          HintPos :=  ListBox1.ClientToScreen(MyPos);
          HintMaxWidth := MySize.cx + 1;
          CursorRect := Rect(MyPos.x, MyPos.y, MyPos.x +
                         MySize.cx, MyPos.y + MySize.cy);
          HintStr := MyString;
          CanShow := True;
        end;
      end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnShowHint :=ShowHint;
end;

kaynak

Yorumlar

Bu blogdaki popüler yayınlar

BMO'yu Bekliyorumdur

Bilgisayar Mühendisleri Odası Yönetmeliğinin 91. maddesine göre bir iş yerinde en az üç oda üyesi varsa ilgili işyerine işyeri temsilcisi atanabilir. TÜRK MÜHENDİS VE MİMAR ODALARI BİRLİĞİ BİLGİSAYAR MÜHENDİSLERİ ODASI ANA YÖNETMELİĞİ İşyeri ve iş bölgesi temsilcilikleri MADDE 91 – (Başlığı ile birlikte değişik:RG-2/10/2014-29137) (1) En az üç üyenin bulunduğu işyerlerinde veya iş bölgelerinde oda-üye ilişkilerini geliştirmek amacı ile oda yönetim kurulu kararı ile işyeri ve iş bölgesi temsilcilikleri kurulabilir. İşyeri ve iş bölgesi temsilcisi ve yardımcıları şube yönetim kurulu ya da şube yok ise oda yönetim kurulu kararı ile atanır ve görevden alınır. İşyeri ve iş bölgesi temsilcilerinin görevleri oda yönetim kurulu tarafından belirlenir. İşyerinde oda - üye ilişkilerini daha etkili hale getirebilmek için odaya başvurdum ve çalıştığım işyerine beni ya da yönetim kurulunun uygun göreceği başka bir üye arkadaşın işyeri temsilcisi olarak belirlenmesini talep ettim. (Bu ta...