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

Kadın Spikerler

Bazıları haber sunarken güzel görünmeye çalışıyorlar bazıları ise güzel oldukları için haber sunuyorlar. Bunun yanında hem haber sunan hem de güzel olanlarda yok değil. Nasıl bir haber sunduğu konusunda (tonlama, vurgu, mimik) fazla bilgim olmasada çok güzel bi hanım kızımız olduğu gözlerden kaçmıyor Melissa Theuriau'in. Meslek hayatında başarılı olmasını dilemekten başka bir şey söyleyemiyorum :) Türkiye tarafında ise ön plana çıkan Banu Güven (Ntv) ve Burcu Esmersoy (CnnTurk) var. Bana göre Banu Güven işini yaparken güzel görünüyor Burcu ise güzel göründüğü için iş yapıyor. Her ikisininde konuşmakla ilgili bir takım problemleri var ama her zaman için Banu Güven'i tek geçerim bu alemde :)

Leyse li'l-insâni illâ mâ seâ

"Leyse li'l-insâni illâ mâ seâ" derken Hudâ; Anlamam hiç meskenetten sen ne beklersin daha? Mehmet Akif Ersoy / Durmayalim Leyse li'l-insâni illâ mâ seâ : Necm Süresi 39. Ayet. [İnsan için ancak çalıştığı vardır.] Meskenet: 1 . Miskinlik, beceriksizlik. 2 . Yoksulluk, fakirlik. (Türk Dil Kurumu) Olay zaten yeterince acik. Yan gelip yatma kardesim. Calis. Bu misralar yazildigi donemde bu anlami tasiyordu fakat zaman ilerledikce baska bir gercegi de gozler onune seriyor.Gerci bu gercek cok kapsamli bir kac satirla anlatilabilecek bir sey degil kaldiki benim bilgim de buna yeterli degil zaten. Ben giris cumlelerini verebilirim gerisini arastirmak yaziyi okuyanlara kalmis. (Matrix gibi bisey oldu bu yaw. Neo'nun kahinle bulusup yanindan ayrildiktan sonra Morpheus ile konusma sahnesi.) Yani kisaca sunu demek istiyorum. Ben bu misrayi ilk okudugumda hic birsey anlamadim. Bu misralari anlayabilmek icin kuran mealine ve turkce sozluklere bakmak zorunda k...

Bana ordan 2 kilo özgürlük tart abicim. İyisinden olsun!

Bu nasıl bir iş kardeşim? Özgürlükleri herkes kendi keyfine göre uygularsa ne olur bu milletin hali? Madem yazılan yorumlardan gocunacan yorum özelliğini direkt kapat bitsin olay. bekirimin yazma hakkını elinden alamazsın. "Site benim istediğimi yaparım" diyebilirsin haklısın ama o zamada bende ..... http://alisari.zaxaz.com/index.php/2005/02/23/p157