AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vista Balloon Tip

Ein Thema von delphin06 · begonnen am 8. Mär 2008 · letzter Beitrag vom 18. Mär 2008
Antwort Antwort
Seite 3 von 4     123 4      
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#21

Re: Vista Balloon Tip

  Alt 15. Mär 2008, 16:23
Moin,

So (aber das wussten wir ja schon Dieser Code erzeugt leider nur das normale Balloon-Window):

Delphi-Quellcode:
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: pchar;
  Text: PWideChar);
const
  TOOLTIPS_CLASS = 'tooltips_class32';
  TTS_ALWAYSTIP = $01;
  TTS_NOPREFIX = $02;
  TTS_BALLOON = $40;
  TTF_SUBCLASS = $0010;
  TTF_TRANSPARENT = $0100;
  TTF_CENTERTIP = $0002;
  TTM_ADDTOOL = $0400 + 50;
  TTM_SETTITLE = (WM_USER + 32);
  ICC_WIN95_CLASSES = $000000FF;
type
  TOOLINFO = packed record
    cbSize: Integer;
    uFlags: Integer;
    hwnd: THandle;
    uId: Integer;
    rect: TRect;
    hinst: THandle;
    lpszText: PWideChar;
    lParam: Integer;
  end;
var
  hWndTip: THandle;
  ti: TOOLINFO;
  hWnd: THandle;
begin
  hWnd := Control.Handle;
  hWndTip := CreateWindow(TOOLTIPS_CLASS, nil,
    WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,
    0, 0, 0, 0, hWnd, 0, HInstance, nil);
  if hWndTip <> 0 then
  begin
    SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0,
      SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    ti.cbSize := SizeOf(ti);
    ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS;
    ti.hwnd := hWnd;
    ti.lpszText := Text;
    Windows.GetClientRect(hWnd, ti.rect);
    SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(@ti));
    SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title));
  end;
end;
Aufruf:
Delphi-Quellcode:
ShowBalloonTip(Button1, 2, 'Empty Value!',
    'Please enter something, ANYTHING(!)' +sLineBreak + 'in the edit box!');
Grüße,
Max
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#22

Re: Vista Balloon Tip

  Alt 15. Mär 2008, 16:24
Ach so meintest du das...ich dachte jez du hättest teile vom c++ code ind delphi umgeschrieben
  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#23

Re: Vista Balloon Tip

  Alt 15. Mär 2008, 17:25
Ich hab nochmal ein bisschen gegoogled und folgendes gefunden:

Vista Balloon Hints

So wie es aussieht entscheidet Vista welcher Balloon Style verwendet wird.

Zitat:
Based on my limited testing, the system seems to style the balloon using Style #1 when no windows are visible on the screen. If there is a window, it tends to use Style #2.
In dem C++ Code wird auch ein Fenster erstellt, was Transparent ist.

Man müsste jetzt wissen, nach welchen Kriterien Vista da vorgeht um jeweils den einen oder den anderen Style zu verwenden...
  Mit Zitat antworten Zitat
TurboMartin

Registriert seit: 13. Feb 2006
Ort: Bad Honnef
765 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: Vista Balloon Tip

  Alt 15. Mär 2008, 18:50
Hab grad was gefunden, was dir helfen kann: TTM_SETWINDOWTHEME hab ich in der CommCtrl.h gefunden


MS VisualStudio 05 - Hilfe

TTM_SETWINDOWTHEME Message

--------------------------------------------------------------------------------

Sets the visual style of a ToolTip control.

Syntax


To send this message, call the SendMessage function as follows.
lResult = SendMessage( // returns nothing in lResult (HWND) hWndControl, // handle to destination control (UINT) TTM_SETWINDOWTHEME, // message ID (WPARAM) wParam, // = 0; not used, must be zero (LPARAM) lParam // = (LPARAM) (LPWSTR) pwStr; );
Parameters

wParam
Must be zero.
pwStr
Pointer to a Unicode string that contains the ToolTip visual style to set.
Return Value

The return value is not used.

Remarks

Note To use this API, you must provide a manifest specifying Comclt32.dll version 6.0. For more information on manifests, see Using Windows XP Visual Styles.
Message Information

Header commctrl.h
Minimum operating systems Windows XP


--------------------------------------------------------------------------------

© 2005 Microsoft Corporation. All rights reserved.

Quelle: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/shellcc/platform/commctls/tooltip/messages/ttm_setwindowtheme.htm
Tomorrow will be cancelled due to lack of interest.

  Mit Zitat antworten Zitat
delphin06

Registriert seit: 18. Jun 2006
154 Beiträge
 
#25

Re: Vista Balloon Tip

  Alt 15. Mär 2008, 19:59
Ich komm da nich wirklich weiter und vergeude viel zu viel zeit damit...also wenn keiner eine Lösung hat dann lass ichs und nimm die normalen Balloon Tips...

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#26

Re: Vista Balloon Tip

  Alt 16. Mär 2008, 14:51
Der Beitrag hinter dem LInk
entspricht in etwa dem von Prototypjack geposteten. Der scheint einige Tests wert zu sein.

http://msdn2.microsoft.com/en-us/lib...52(VS.85).aspx
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Saarpoint

Registriert seit: 2. Sep 2005
12 Beiträge
 
Delphi 2005 Professional
 
#27

Re: Vista Balloon Tip

  Alt 16. Mär 2008, 15:54
Wieso macht ihr euch so viel Arbeit?

Nutze doch einfach eine eigene Form welche unten rechts in der Ecke angezeigt wird.
Die meisten Entwickler machen das.
Erstens kannst du dann deine Inhalte (was und wie sie angezeigt werden) selbst gestalten und
kannst dir auch sicher sein, dass es auch angezeigt wird.
Die meisten Nutzer haben, entweder selbst oder über ein Tuning-Tool, die Balloons abgeschaltet.

Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#28

Re: Vista Balloon Tip

  Alt 16. Mär 2008, 18:09
Vielleicht macht es Spass?
Angehängte Dateien
Dateityp: 7z hinttest_202.7z (2,7 KB, 40x aufgerufen)
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#29

Re: Vista Balloon Tip

  Alt 16. Mär 2008, 18:55
Zitat von Saarpoint:
Wieso macht ihr euch so viel Arbeit?

Nutze doch einfach eine eigene Form welche unten rechts in der Ecke angezeigt wird.
Die meisten Entwickler machen das.
Erstens kannst du dann deine Inhalte (was und wie sie angezeigt werden) selbst gestalten und
kannst dir auch sicher sein, dass es auch angezeigt wird.
Die meisten Nutzer haben, entweder selbst oder über ein Tuning-Tool, die Balloons abgeschaltet.

Andreas
Wo wäre dann die Herausforderung? Und wichtiger noch: Wo wäre dann die Konformität zu den Vista-Standards?
Solche Geschichten wie dieses Tooltip hier sind einfach tolle, kleine Herausforderungen, denen man, ohne Termindruck oder etc. nachgehen kann. Es macht einfach Spaß

Edit: Ich hab's!

Ich hätte es auch schon viel länger haben können, hätte ich mich nicht vom C++ Beispiel durcheinanderbringen lassen...

Ich baue das eben noch in handliche Funktionen um..
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Prototypjack

Registriert seit: 2. Feb 2003
611 Beiträge
 
Delphi 2009 Professional
 
#30

Re: Vista Balloon Tip

  Alt 16. Mär 2008, 19:58
Moin,

So, ich denke das war's.

Hier ist nochmal eine etwas verbesserte Version meines vorherigen Tooltip-Codes (etwas erweitert) und dann des Rätsels Lösung - die fixierte Balloontip Box.
Da diese Box fixiert ist, wird ein Handle zurückgegeben, mit welchem man mit der Hide-Procedure selbiges wieder unsichtbar machen kann (denn es gibt nur 2 Wege: Entweder ein Klick auf einen etwaigen Close-Button, oder die Hide-Procedure).

Delphi-Quellcode:
type
  TTOOLINFO = packed record
    cbSize: Integer;
    uFlags: Integer;
    hwnd: THandle;
    uId: Integer;
    rect: TRect;
    hinst: THandle;
    lpszText: PWideChar;
    lParam: Integer;
  end;

const
  TOOLTIPS_CLASS = 'tooltips_class32';
  TTS_ALWAYSTIP = $01;
  TTS_NOPREFIX = $02;
  TTS_BALLOON = $40;
  TTS_CLOSE = $80;
  TTF_SUBCLASS = $0010;
  TTF_TRANSPARENT = $0100;
  TTF_CENTERTIP = $0002;
  TTM_ADDTOOL = $0400 + 50;
  TTM_SETTITLE = (WM_USER + 32);
  ICC_WIN95_CLASSES = $000000FF;

function ShowBalloonTipFixed(AControl: TWinControl; AIcon: Integer;
  ATitle: string; AText: WideString; ACloseButton: Boolean; X: Integer;
  Y: Integer): THandle;
var
  lToolInfo: TTOOLINFO;
  lParentHandle: THandle;
  lParameters: Cardinal;
begin
  lParentHandle := AControl.Handle;
  lParameters := WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP;
  if ACloseButton then
  begin
    lParameters := lParameters or TTS_CLOSE;
  end;
  Result := CreateWindow(TOOLTIPS_CLASS, nil, lParameters,
    0, 0, 0, 0, lParentHandle, 0, HInstance, nil);
  if Result <> 0 then
  begin
    SetWindowPos(Result, HWND_TOPMOST, 0, 0, 0, 0,
      SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    lToolInfo.cbSize := SizeOf(lToolInfo);
    lToolInfo.uFlags := TTF_TRANSPARENT or TTF_SUBCLASS or TTF_TRACK;
    lToolInfo.hwnd := lParentHandle;
    lToolInfo.lpszText := PWideChar(AText);
    Windows.GetClientRect(lParentHandle, lToolInfo.rect);
    SendMessage(Result, TTM_ADDTOOL, 1, Integer(@lToolInfo));
    SendMessage(Result, TTM_SETTITLE, AIcon mod 4, Integer(PChar(ATitle)));
    SendMessage(Result, TTM_TRACKPOSITION, 0, MakeLong(X, Y));
    SendMessage(Result, TTM_TRACKACTIVATE, Ord(True), Integer(@lToolInfo));
  end;
end;

function ShowBalloonTip(AControl: TWinControl; AIcon: Integer; ATitle: string;
  AText: WideString; ACloseButton: Boolean; ACenterTip: Boolean): THandle;
var
  lToolInfo: TTOOLINFO;
  lParentHandle: THandle;
  lParameters: Cardinal;
begin
  lParentHandle := AControl.Handle;
  lParameters := WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP;
  if ACloseButton then
  begin
    lParameters := lParameters or TTS_CLOSE;
  end;
  Result := CreateWindow(TOOLTIPS_CLASS, nil, lParameters,
    0, 0, 0, 0, lParentHandle, 0, HInstance, nil);
  if Result <> 0 then
  begin
    SetWindowPos(Result, HWND_TOPMOST, 0, 0, 0, 0,
      SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    lToolInfo.cbSize := SizeOf(lToolInfo);
    lToolInfo.uFlags := TTF_TRANSPARENT or TTF_SUBCLASS;
    if ACenterTip then
    begin
      lToolInfo.uFlags := lToolInfo.uFlags or TTF_CENTERTIP;
    end;
    lToolInfo.hwnd := lParentHandle;
    lToolInfo.lpszText := PWideChar(AText);
    Windows.GetClientRect(lParentHandle, lToolInfo.rect);
    SendMessage(Result, TTM_ADDTOOL, 1, Integer(@lToolInfo));
    SendMessage(Result, TTM_SETTITLE, AIcon mod 4, Integer(PChar(ATitle)));
  end;
end;

procedure HideBalloonTipFixed(AToolTip: THandle);
begin
  SendMessage(AToolTip, TTM_TRACKACTIVATE, Ord(False), 0);
end;
Ich ärgere mich, denn das war genau mein letzter Gedanke, bevor ich mich dem C++ Code zugewandt hatte, welcher durch seine scheinbar identische Aufrufsprozeduren meine Theorie verworfen hatte.

Viel Spass damit & Grüße,
Max

Edit: Möglicherweise ist dieser Code ja was für die Code-Lib? Ich habe im Internet bis jetzt noch keine fixierte BalloonTip Funktion gefunden.
Hmm, mal sehen.
Max
„If you have any great suggestions, feel free to mail me, and I'll probably feel free to ignore you.“ . Linus Torvalds
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz