![]() |
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'
|
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
In den Projektoptionen unter Output C/C++ "Generate DCUs only" einstellen.
|
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Zitat:
Ups, wo kommt denn urplötzlich diese Frage her? :shock: Ausrede: Hatte Urlaub und hab nix gesehn. Zitat:
Wo es aber sowieso eine "Warnung" wegen der Klassenmethoden gibt, ist das Ganze dann, so wie es jetzt ist, eh nicht für C++ geeignet? |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Gibt es inzwischen eine XE3 Version? Bei mir kommen zahlreiche Fehler auch wenn ich "Generate DCU only" aktiviere.
PS: Man, EMBA, so langsam zweifel ich ja an Euch. Wie kann man Hint's vergessen/nicht implementieren? |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Kann ja mal die nächsten paar Tage versuchen nachzusehn was wie so los ist.
Der Grund dürfte sein, daß die ganz schön viel am FMX verändet haben (darum nennt sich das ja auch FMX 2.0 und nicht FMX-Bugfix 1.1 ... Nja, neuer Anfang, neue Fehler) Nja, die Property Hint und ShowHint existieren inzwischen schon. Zwar auskommentiert, aber der ganze Code dahinter fehlt halt noch irgendwie. |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Wie so manches fehlt ... Aber soll ja Stück für Stück kommen. Wie bei XE2 :)
Habe gerade gemerkt (natürlich NACH Release-Abgabe!), dass die Anchors auch nicht einwandfrei klappen. Ein TProgress hat plötzlich eine Breite von 1824, obwohl sie in einem Panel von 380 Pixeln angeklebt sind; hatte auch irgendwann mal ne korrekte Breite. Die Breite kann ich nicht ändern, muss erst "Anchors" rausnehmen. Das ist doch ne Grütze, echt. Wenn ich mich darauf nicht verlassen kann, dann kann ich ein weiteres Feature nicht nutzen. |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Waren am Ende nur ein paar kleinere Umbauten.
Ein erster Test meint zumindestens, daß es jetzt auch im XE3 / FMX2 funktioniert. |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Mit Mac?
|
AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
Da ich keinen Mac besitze .... k.A.
Was ich allerdings aussagen kann, daß sich in XE3, natürlich bis auf das Design-Time-Package, alle Projekte mit Win32, Win64 und OSX kompilieren lassen. (für OSX muß nur die Unit Winapi.Windows aus dem Demoprojekt entfernt werden) Aber was ich noch weiß, daß der C++Builder nicht mit Dotted-FileNames umgehn kann, drum müßte man dort mindestens die Punkte aus den Dateinamen entfernen ... aber ob es danach dann geht ... k.A. (hab noch keine ![]() |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.3)
Hallo,
ich habe mir das ganze mal angeschaut und bin nicht wirklich begeistert. Warum läuft das ganze nicht unter 64 Bit und ich bekomme es auch nicht hin die Schriftfarbe des Hints anzupassen. Für deine Antwort bin ich im Voraus dankbar! Gruß Niao |
AW: Brennende Hinweise (FMX-Hints - THintManager 1.3)
When compiled with XE5(same with XE4) there are several compile errors:
Code:
If needed, I could arrange TeamViewer session.
Checking project dependencies...
Compiling Package.HintManager.dproj (Debug, Win32) [dcc32 Error] FMX.HintManager.pas(312): E2037 Declaration of 'ApplyTriggerEffect' differs from previous declaration [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetIsFocused [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetEnabled [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetAbsoluteEnabled [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetPopupMenu [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.EnterChildren [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.ExitChildren [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.DoActivate [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.DoDeactivate [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.MouseClick [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.GetInheritedCursor [dcc32 Error] FMX.HintManager.pas(79): E2291 Missing implementation of interface method IControl.SetAcceptsControls [dcc32 Error] FMX.HintManager.pas(1167): E2075 This form of method call only allowed in methods of derived types [dcc32 Error] FMX.HintManager.pas(1168): E2003 Undeclared identifier: 'Parent' [dcc32 Error] FMX.HintManager.pas(1168): E2003 Undeclared identifier: 'FManager' [dcc32 Error] FMX.HintManager.pas(1168): E2008 Incompatible types [dcc32 Error] FMX.HintManager.pas(1169): E2003 Undeclared identifier: 'FHintVisible' [dcc32 Error] FMX.HintManager.pas(1169): E2015 Operator not applicable to this operand type [dcc32 Error] FMX.HintManager.pas(1170): E2066 Missing operator or semicolon [dcc32 Error] FMX.HintManager.pas(1172): E2066 Missing operator or semicolon [dcc32 Error] FMX.HintManager.pas(312): E2065 Unsatisfied forward or external declaration: 'THintItem.ApplyTriggerEffect' [dcc32 Fatal Error] Package.HintManager.dpk(36): F2063 Could not compile used unit 'Fmx.HintManager.pas' Failed Elapsed time: 00:00:02.6 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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