![]() |
| im Hint anzeigen
Zitat:
aber leider schneidet Delphi ab Diesem den Text ja nun ab ... gibt es da überhaupt einen Weg dieses dennoch anzeigen zu lassen? [add] ich dachte erst mein mehrzeiliger Hinttext sei zu lang :? |
Re: | im Hint anzeigen
Evtl. eigene Implementierung des Hintfensters verwenden? Das ElPack von LMD hat sowas (um Unicode auch vor D2009 un HTML im Hint zu unterstützen)
|
Re: | im Hint anzeigen
Ich hatte mir grad mal TCustomHint.ShowHint(Control: TControl); angesehn und dieses läßt sich leider nicht überschreiben. Ja und gerade diese Funktion wird ja durch die VCL aufgerufen,
also selbst wenn ich da eine andere Hint-Klasse registriere, komm ich nicht an den kompletten Hint-Text ran :cry: function GetShortHint(const Hint: string): string; aus der Unit Controls könnte ich noch versuchen irgendwie zu ersetzen. (ich glaub da gab's doch sowas mit Hooks, aber ob das hier geht, weiß ich grad nicht ... muß mal suchen, wo hier der Thread zu sowas nochmal war) Alternativ wären noch 2 Möglichkeiten übrig:
|
Re: | im Hint anzeigen
Evtl. so wie bei && > & und '' > ' einfach verdoppeln?
Also Sowas: Zitat:
|
Re: | im Hint anzeigen
||, \| und Co. ... so schlau war ich auch schon, aber selbst nach näherem Hinsehn, gibt's da keine Maskierung :?
Delphi-Quellcode:
und
function GetShortHint(const Hint: string): string;
var I: Integer; begin I := AnsiPos('|', Hint); if I = 0 then Result := Hint else Result := Copy(Hint, 1, I - 1); end;
Delphi-Quellcode:
ich wollte doch nur im Hint angeben, was es für Möglichkeiten bei der Maske gibt :cry:
procedure TCustomHint.ShowHint(Control: TControl);
var Pos: TPoint; Index: Integer; begin if Control.Hint = '' then Exit; Index := AnsiPos('|', Control.Hint); //Do Not Localize Title := GetShortHint(Control.Hint); if Index <> 0 then Description := GetLongHint(Control.Hint) else Description := ''; ... also im LongHint wäre ein | möglich, da ja nur das Erste ausgewertet wird, aber im Hint angezeigt wird ja nur der ShortHint. |
Re: | im Hint anzeigen
Kann man sowas vielleicht mit dem ASCII-Zeichensatz hinbekommen?
Delphi-Quellcode:
Ungetestet und geraten. Evtl. ist es völliger Blödsinn.
Edit1.Hint := 'Name' + #124 + 'Geben Sie den Namen in das Eingabefeld ein';
Grüße, Matze |
Re: | im Hint anzeigen
Ich habe mal irgend wo (
![]() Das "überschreibt" die normalen Hints und zeigt auch '|' im Hilfetext an. Evtl. kannste das ja an deine Wünsche anpassen oder dich davon inspirieren lassen. ^^ (oder 1:1 verwenden ^^)
Delphi-Quellcode:
EDIT: ups ... zu viel kopiert ^^
procedure ShowBalloonTip(Control: TWinControl; Icon: integer; // benötigt 'Commctrl' (uses)
Title: pchar; Text: PWideChar; BackCL, TextCL: TColor); {ShowBalloonTip(Button1, 1, 'Title', 'Balloontiptext', clBlue, clNavy);} procedure ShowBalloonTip(Control: TWinControl; Icon: integer; Title: pchar; Text: PWideChar; BackCL, TextCL: TColor); 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_SETTIPBKCOLOR, BackCL, 0); SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0); SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(@ti)); SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title)); end; end; |
Re: | im Hint anzeigen
Du könntest ja einfach "Hint >> Bla bla" nehmen und beim Zeichnen dann >> durch | ersetzen. Das Zeichen lässt sich ja mittels HintWindow-Klassen personalisieren...
Viele Grüße |
Re: | im Hint anzeigen
Zitat:
Zitat:
|
Re: | im Hint anzeigen
Zitat:
Zitat:
google Es wurden keine mit Ihrer Suchanfrage - | - übereinstimmenden Dokumente gefunden. Vorschläge: * Probieren Sie andere Suchbegriffe. also bis jetzt hatte ich es noch nie geschaft, daß mir google absolut nix liefert ... is also 'ne Premiere für mich ... sonst kommt ja wenigstens noch sowas google Meinten Sie: ..... Es wurden keine Standard-Webseiten gefunden, in denen alle eingegebenen Suchbegriffe vorkommen. Es wurden keine mit Ihrer Suchanfrage - ..... - übereinstimmenden Dokumente gefunden. Vorschläge: * Vergewissern Sie sich, dass alle Wörter richtig geschrieben sind. * Probieren Sie andere Suchbegriffe. * Probieren Sie allgemeinere Suchbegriffe. Also das mit dem BalloonTip wäre eine Möglichkeit und sieht bestimmt nicht schlecht aus. Nur selbst einblenden ... hab grad keine Ahnung wie ich das machen sollte (also auf welches Ereignis hin), aber ich denk da läßt sich was machen, wenn ich im HintText das Zeichen Kodiere und dann beim Anzeigen umwandel ... aber so oder so (andere Hintklasse oder ToolTip) ich werd wohl etwas "eigenes" registrieren müssen :? (also eine Maskierungsmöglichkeit für das | im HintText, seitens Delphi, wäre schon besser gewesen :evil: ) |
Re: | im Hint anzeigen
Zitat:
![]() |
Re: | im Hint anzeigen
:wall: wie soll man nur auf sowas kommen? :oops:
Aber der Artikel hat mir eine weitere Lösung aufgezeigt ... und zwar das Zeichen ¦ (ist auch im ANSI mit enthalten) ich werd' aber dennoch demnächst im OnEnter einiger Edits noch den BalloonTip mit anzeigen :angel: |
Re: | im Hint anzeigen
@TeronG:
Delphi-Quellcode:
hab jetzt deine Variante verbaut, auch wenn ich erst versucht hatte den ToolTip direkt per Aufruf anzuzeigen und mich wunderte waru nix angezeigt wird
Uses CommCtrl;
Procedure SetBalloonTip(Control: TWinControl; Const Title, Text: String; Icon: Integer = TTI_INFO); Var H: THandle; TI: TToolInfo; Begin H := CreateWindow(TOOLTIPS_CLASS, nil, WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP, 0, 0, 0, 0, Control.Handle, 0, HInstance, nil); If H <> 0 Then Begin SetWindowPos(H, 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 := Control.Handle; TI.lpszText := PChar(Text); GetClientRect(Control.Handle, TI.Rect); SendMessage(H, TTM_ADDTOOL, 1, Integer(@TI)); SendMessage(H, TTM_SETTITLE, Icon, Integer(Title)); End; End; hab jetzt alles auf das Nötige gekürzt - in der Unit CommCtrl war ja schon alles enthalten und muß nicht nochmal definiert werden - und die beiden Farben flogen auch raus ... brauch ja nur das aktuelle Windowsdesign :angel: - OK und String gefiehl mir auch besser als dieses PChar-PWideChar-Gemischmasch :nerd: - Prozedurname geändert Set statt Show, denn der wird ja nur gesetzt und nicht direkt angezeigt. Ja und es wird jetzt endlich alles schön angezeigt, ohne daß ich groß was ändern mußt :thumb: |
Re: | im Hint anzeigen
Bug (erinnert/)gefunden....
Wenn du mit der Maus so lange über einem (z.B.) Button bist, bis der Tip verschwindet taucht er bei erneutem drüberfahren nicht mehr auf. Btw: ist das Absicht, dass bei deiner Version der Titel "anders" dargestellt wird!? Zitat:
|
Re: | im Hint anzeigen
Zitat:
wird also wieder angezeigt Zitat:
Abgesehn von den Farben sollte sich nix ändern. |
Re: | im Hint anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Also solange das ding sich nicht selbst ausblendet kommt es auch bei mir wieder aber nicht wenn ich "die zeit übersehe". :gruebel: Egal... irgend was ist bei mir sowieso nicht mehr ganz koscher. Btw, Habe meine alte gleich mal durch deine Kurze Version ersetzt. :thumb: (auch wenn die "farbwahl" weggefallen ist ^^) Zitat:
So, wie aufm bild im Anhang. :) ( Bild > 1000 Worte) ^^ EDIT: BTW: Schön sich wenigstens mal n bissel revanchieren zu können :mrgreen: |
Re: | im Hint anzeigen
Zitat:
> praktisch zwei Parameter angehängt und die 2 SendMessages wirder rein und das wäre wieder da Zitat:
[add] hab grad nochmal mit deinem Code verglichen und der Titel hat sich eigentlich nicht geändert, außer das jetzt String statt PChar ist, aber intern sieht ein String ja auch wie ein PChar aus, also sollte sich da nix ändern :gruebel: |
Re: | im Hint anzeigen
hmm ... keine Ahnung, warum bei mir die Neue nicht geht ... aber halb so wild.
|
Re: | im Hint anzeigen
mein akiv laufendes XP ist auch etwas verkorkst ... vielleicht ja so verkorkst, daß es hier deswegen läuft? :lol:
(komme einach nicht zum neuinstallieren, dabei wollt ich mal alles auf Seven umlagern, welches ja eigentlich schon installiert ist) Aber vielleicht findet sich ja noch jemand, der es mal bei sich testet :angel: |
Re: | im Hint anzeigen
Zitat:
Vista Ultimate 32 Bit D2007 Gruß, Chris |
Re: | im Hint anzeigen
Habe "meine" alte Version pö a pö auf Richtung "neue" getrimmt bis ich den Schuldigen hatte.
UND!! 42 war die Lösung!! ... ääähhhh naja ... eigentlich WM_USER + 32 ... aber ist ja "knapp" dran. ^^
Delphi-Quellcode:
TTM_ADDTOOL ($0400 + 50) unterscheidet sich bei mir auch noch zur CommCtrl Version(WM_USER + 4) aber der Rest ist gleich.... //WM_USER = $0400
const
TTM_SETTITLE = (WM_USER + 32); EDIT: BTW: Alte Version: TTM_SETTITLE = WM_USER + 32) CommCtrl: TTM_SETTITLE = TTM_SETTITLEW = WM_USER + 33; { wParam = TTI_*, lParam = wchar* szTitle } Hat wohl was mit string, char, widechar, ansichar, ... zu tun. |
Re: | im Hint anzeigen
Zitat:
Dann läuft es auch unter Delphi5. Musste ein paar Konstanten selber definieren und hatte mit WM_User+33 auch so meine optischen Probleme und dachte es liegt an meinen kleinen Anpassungen. |
Re: | im Hint anzeigen
Wie, ihr nutzt in einem Nicht-Unicode-Delphi TTM_SETTITLEW?
komisch, eigentlich sollte dort ja TTM_SETTITLEA verwendet werden, da ja Title ein AnsiString ist :gruebel: |
Re: | im Hint anzeigen
Zitat:
also im Grunde müßte man ja mit deiner Version in D2009 probleme bekommen, da dort ja diese Konstanten auch selber definiert wurden, aber nur für die AnsiVersion und dann dennoch mit PChar gearbeitet wurde, was dann die Konstanten der Wide-Verion benötigt hätte :mrgreen: |
Re: | im Hint anzeigen
TTM_SETTITLEA/W ist in Delphi 5 nicht definiert.
Hatte dann schnell im Source von D2007 geschaut und dort war TTM_SETTITLEW als default definiert. Den Wert dann fälschlicherweise auch bei D5 übernommen. Meinen Fehler hab' ich halt jetzt erst durch die Erkenntnisse hier im Thread bemerkt. Konstanten für D5:
Delphi-Quellcode:
TTS_BALLOON = $40;
TTS_ALWAYSTIP = $01; TTM_SETTITLE = WM_USER + 32; // $0400 + 32 |
Re: | im Hint anzeigen
OK, dann ist das also ein Fehler in Delphi ... bis D2007 sollten ja die A-Versionen als Default strinstehn, da die restlichen APIs auch als AnsiVersion per Default drin sind
TTM_SETTITLEW = PWideChar/WideString/UnicodeString TTM_SETTITLEA = PAnsiChar/AnsiString und in D2009 dann natürlich das W kein Wunder, wenn es nicht geht ... also wenn man versucht einen Ansitext zu verwenden und die Gegenseite es versucht als Unicode zu lesen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz