![]() |
Brennende Hinweise (FMX-Hints - THintManager 1.3)
Liste der Anhänge anzeigen (Anzahl: 11)
Nja, ich hatte da mal ein bissl mit dem Affen rumgespielt und rausgekommen sind Hints für den FireMonkey.
Die funktionieren zwar noch nicht überall, z.B. nicht bei einem Label, aber für sowas wie TButton und TEdit läuft es schonmal. Hinweis: Der Hint liegt in der Form und schwebt nicht darüber. Ich hab aber noch eine Frage, und zwar hat mein HintManager im FormDesigner ein Top und Left, aber ich komm nicht an diese Werte ran, denn der THintManager und seine Vorfahren haben scheinbar keine Positionsangaben. Wie kann ich denn im THintManagerLink (TDefaultEditor) auf die Position des HintManagers zugreifen? Problem ist die Vorschaufunktion ExecuteVerb(0), welche an dem HintManager aufgehn soll, aber zu wissen wo der ist..... Dann weiß ich noch nicht, wie ich Delphi dazu bringe meine Image-Property zu speichern und ein paar Ausrichtungsproblemchen gibt es mit den Bildern auch noch, wie ich heut früh bemerkte, aber da die eh noch nicht in der DFM gespeichert werden... :roll: Ach ja, RuntimePackage kompilieren, DesignPackage installieren, THintManager auf 'ne Form pappen, über das Add-Property 'nen Hint zu einer Komponente hinzufügen (Ich sollte das THintItem wohl auch noch als Komponente registrieren), dann zur Komponente Wechseln, dort in der Struktur den Hint auswählen, und dessen Werte füllen (kann man bestimmt auch noch teilweise automatisieren). So, und falls Emba es doch irgendwann schafft Hints einzubauen, isses och nicht so Schlimm, denn das Ganze ist mehr ein Übungsprojekt, in Punkt Komponentendesign, vorallem in Bezug auf die Speicherverwaltung der Komponenten und die OpenToolsAPI. Alle Referenzen der beteiligten Komponenten, also des Managers, der Items und der verknüpften Komponenten, sollten gegeneinander abgesichtert sein und sich selbst aufräumen, wenn eine Komponente freigegeben wird (hoff ich mal). Falls diesbezüglich noch jemand was erkennt oder zu sagen hat, kann er/sie sich gern melden. Kreuzreferenzen sind halt immer ein etwas heikles Thema ![]() ![]() ![]() |
AW: Brennende Hinweise (FMX-Hints)
Gibts auch einen Screenshot? ;)
|
AW: Brennende Hinweise (FMX-Hints)
Du wirst doch wohl wissen wie ein Hint aussehn könnte? :stupid:
Aber OK, da die Firemonleyleute sowas noch nicht kennen, bekommst du Einen. :angle2: Wenn ich wieder daheim bin, kann ich einen machen. (siehe oben) Im Prinzip ist es eine TCalloutBox, mit TLabel und einem von 3 optionalen TBitmaps. [add] Später kommen noch ein paar Events ala OnCreateHint und OnDestroyHint dazu, wo man den Hint dann selber Designen kann, aber erstmal muß die Verwaltung ordentlich laufen. |
AW: Brennende Hinweise (FMX-Hints)
Jo, wie normale Hints aussehen, das weiß ich :stupid: aber mir ging es dabei eher um die BRENNENDEN Hinweise ;) Dachte, dass die vielleicht komplett Abfackeln oder so, daher die Frage.
|
AW: Brennende Hinweise (FMX-Hints)
Das geht bestimmt auch ... man müßte nur eine feuerähnliche Animation dranhängen. :angle2:
Aber für den Anfang kannst du im HintManager den Shaddow deaktivieren und einen rot-gelben Glow aktivieren. FireMonkey (Grillaffe) |
AW: Brennende Hinweise (FMX-Hints)
Für dich brennt es nun auch (etwas)
siehe Property "Fire" und Demoprojekt (Project9.7z ist eine EXE) Events sind drin. Ein paar kleine Bugfixes und fehlende Dinge behoben Die Komponenten, wo ein Hint dranhängt, müssen scheinbar auf HitTest True stehen, damit es funktioniert. Es ist möglich mehrere HintManager auf einer Form zu nutzen, z.B. falls man ein unterschiedliches Aussehn haben möchte, oder man geht über die Events. Es ist aber (vermutlich) noch nicht möglich an den Einstellungen des HintManager im OnShowEvent rumzuspielen, wie mir grade einfällt. |
AW: Brennende Hinweise (FMX-Hints)
Ach ja, was mir aber grade noch einfällt ... ich hab aktuell die HintItems als TEffect implementiert, was einen kleinen Nachteil hat.
Es kann immer nur ein Effekt pro Komponente aktiv sein, bzw. es wird nach antreffen des ersten aktiven Effekts die Bearbeitung abgebrochen (nicht von mir, sondern vom FMX). Also praktisch kann man aktuell entweder einen Effekt oder einen Hint an eine Komponente hängen, aber dafür gibt es schon eine Lösung ... jedenfalls wenn ich es schaffe, daß mir der Objektdesigner nicht alle sinnlosen Propery auflistet, welche unnötig sind, da es einfach nur extrem unübersichtlich ist. |
AW: Brennende Hinweise (FMX-Hints)
Ich denke mal, diese Version würde ich erstmal als funktionsfähig ansehn. (falls keiner mehr was findet)
- die HintPosition stimmt nun (vorallem wenn der Hint aus der Form rausragt) - die Integreation in den FormDesigner wurde verbessert (z.B. automatisches Selektieren, nach dem Einfügen) - die Vorschauposition stimmt nun auch endlich - es ist kein TEffekt mehr ... kommt also nicht mehr mit Effekten in Konflikt und es funktioniert nun auch bei Komponenten wie der CalloutBox, dem Label und ComboBoxen Aber schon interessant, da ist fast nix in der Demo, aber dennoch sind es 9,4 MB (Debug), bzw. 3,6 MB (Release) und ich frag mich, wer da bei Emba von mir abguckt? :gruebel: Zitat:
|
AW: Brennende Hinweise (FMX-Hints)
Nur noch eine kleine Erweiterung.
- Im OnShowHint kommt man nun auch an das ElternControl ran, wo der Hint dran hängt, wenn es Eines geben sollte. - Und der nachfolgende Code für ![]()
Delphi-Quellcode:
Der Code entspricht in etwa Folgendem, so wie man es aus der VCL kennt, was aber im FMX nicht mehr funktioniert.
procedure TForm9.Edit3Exit(Sender: TObject); // OnExit des Edit3
begin if Edit3.Text = '' then TExitManager.DontExit(Sender); // TExitManager.DontExit(Sender, 'Bitte einen Wert eingeben.'); end;
Delphi-Quellcode:
// im OnExit des Edit3
if Edit3.Text = '' then begin ShowMessage('Fehlerhafte Eingabe'); Edit1.SetFocus; end;
Delphi-Quellcode:
type
TExitManager = class abstract private class var FManager: THintManager; FGlow: TGlowEffect; private class procedure HideHint(Sender: TObject); class function ShowHint(Sender: TObject; Form: TCustomForm; Position: TRectF; Text: string; Image: THintImage; AssignedComp: TControl): Boolean; public class procedure DontExit(Sender: TObject; UserMessage: string = ''); class destructor Destroy; end; class destructor TExitManager.Destroy; begin FreeAndNil(FManager); FreeAndNil(FGlow); end; class procedure TExitManager.DontExit(Sender: TObject; UserMessage: string); begin if not (Sender is TControl) then raise Exception.Create('nee, so nich'); if not Assigned(FManager) then begin FManager := THintManager.Create(nil); FManager.GlowColor := TAlphaColorRec.Firebrick; FManager.GlowEnabled := True; FManager.OnShowHint := ShowHint; FManager.OnHideHint := HideHint; FGlow := TGlowEffect.Create(nil); FGlow.GlowColor := TAlphaColorRec.Firebrick; end; if Trim(UserMessage) = '' then UserMessage := 'Fehlerhafte Eingabe'; FManager.ShowHint(TControl(Sender), UserMessage, hiDefault, True); (TControl(Sender) as IControl).DoEnter; Abort; end; class procedure TExitManager.HideHint(Sender: TObject); begin FGlow.Parent := nil; end; class function TExitManager.ShowHint(Sender: TObject; Form: TCustomForm; Position: TRectF; Text: string; Image: THintImage; AssignedComp: TControl): Boolean; begin //AssignedComp.InsertObject(0, FGlow); // FGlow.Parent := AssignedComp; FGlow.BringToFront; Result := False; end; |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Beim kompilieren Delphi XE2 "ProjectGroup.HintManager.groupproj" im Debug, habe ich diese warnung:
Code:
Wie man es beheben?
[DCC Warning] Fmx.ExitManager.pas(1): W1025 Unsupported language feature: 'class constructor'
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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