Автор: Олег Кулабухов
Ниже описан один прием показа окна
Code: |
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Enabled := false; Panel1.Visible := false; Panel1.BevelInner := bvNone; Panel1.BevelOuter := bvNone; Panel1.BorderStyle := bsSingle; Panel1.Color := clWhite; Button1.Hint := 'Hint test'; end;
procedure TForm1.ShowAHint(x: integer; y: integer; Caption: string; Duration: LongInt); var dc: hdc; OldFont: hFont; pt: TSize; p: pChar; begin if Timer1.Enabled <> false then Timer1.Enabled := false; Timer1.Enabled := false; if Panel1.Visible <> false then Panel1.Visible := false; if Caption = '' then exit; Panel1.Caption := caption; {Get the width of the caption string} GetMem(p, Length(Panel1.Caption) + 1); StrPCopy(p, Panel1.Caption); dc := GetDc(Panel1.Handle); OldFont := SelectObject(dc, Panel1.Font.Handle); GetTextExtentPoint32(dc, p, Length(Panel1.Caption), pt); SelectObject(dc, OldFont); ReleaseDc(Panel1.Handle, Dc); FreeMem(p, Length(Panel1.Caption) + 1); {Position and show the panel} Panel1.Left := x; Panel1.Top := y; Panel1.Width := pt.cx + 6; Panel1.Height := pt.cy + 2; Panel1.Visible := true; {Fire off the timer to hide the panel} Timer1.Interval := Duration; Timer1.Enabled := true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if Panel1.Visible <> false then Panel1.Visible := false; Timer1.Enabled := false; end;
procedure TForm1.Button1Click(Sender: TObject); begin {Let the button repaint} Application.ProcessMessages; ShowAHint(Button1.Left, Button1.Top + Button1.Height + 6, Button1.Hint, 2000); end; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!