Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Brennende Hinweise (FMX-Hints - THintManager 1.3) (https://www.delphipraxis.net/169747-brennende-hinweise-fmx-hints-thintmanager-1-3-a.html)

himitsu 9. Aug 2012 09:19


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


http://cc.embarcadero.com/item/28965 http://qc.embarcadero.com/wc/qcmain.aspx?d=106368 http://qc.embarcadero.com/wc/qcmain.aspx?d=104857

s.h.a.r.k 9. Aug 2012 09:28

AW: Brennende Hinweise (FMX-Hints)
 
Gibts auch einen Screenshot? ;)

himitsu 9. Aug 2012 09:53

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.

s.h.a.r.k 9. Aug 2012 10:35

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.

himitsu 9. Aug 2012 10:39

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)

himitsu 10. Aug 2012 08:24

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.

himitsu 10. Aug 2012 13:56

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.

himitsu 11. Aug 2012 01:27

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:

Delphi-Quellcode:
type
  THackComboListBox = class(TComboEditListBox);

Daniel muß wohl bald mal die Max. Dateigröße anpassen, damit man überhaupt noch was hochladen kann. (für volle ScreenShots isses ja jetzt schon ganz schön eng)

himitsu 17. Aug 2012 23:33

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 http://www.delphipraxis.net/169822-f...iremonkey.html

Delphi-Quellcode:
procedure TForm9.Edit3Exit(Sender: TObject); // OnExit des Edit3
begin
  if Edit3.Text = '' then
    TExitManager.DontExit(Sender); // TExitManager.DontExit(Sender, 'Bitte einen Wert eingeben.');
end;
Der Code entspricht in etwa Folgendem, so wie man es aus der VCL kennt, was aber im FMX nicht mehr funktioniert.
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;

Goaul 23. Sep 2012 11:25

AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
 
Beim kompilieren Delphi XE2 "ProjectGroup.HintManager.groupproj" im Debug, habe ich diese warnung:

Code:
[DCC Warning] Fmx.ExitManager.pas(1): W1025 Unsupported language feature: 'class constructor'
Wie man es beheben?

Stevie 27. Sep 2012 21:11

AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
 
In den Projektoptionen unter Output C/C++ "Generate DCUs only" einstellen.

himitsu 27. Sep 2012 23:20

AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
 
Zitat:

Zitat von Stevie (Beitrag 1184763)
In den Projektoptionen unter Output C/C++ "Generate DCUs only" einstellen.

Danke.

Ups, wo kommt denn urplötzlich diese Frage her? :shock:
Ausrede: Hatte Urlaub und hab nix gesehn.



Zitat:

It is not working in C++ builder (XE2 update 4).

The generated header file FMX.HintManager.hpp does not compile, it give the error "simple file name expected" on THintEvent
Hmmmm, der C++Builder kommt wohl nicht mit gepunkteten Dateinamen zurecht?

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?

greenmile 9. Okt 2012 11:55

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?

himitsu 9. Okt 2012 12:18

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.

greenmile 10. Okt 2012 12:16

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.

himitsu 24. Okt 2012 00:36

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.

greenmile 24. Okt 2012 09:55

AW: Brennende Hinweise (FMX-Hints - THintManager 1.2)
 
Mit Mac?

himitsu 24. Okt 2012 13:51

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 Rückantwort erhalten)

niao 26. Dez 2012 13:08

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

Goaul 12. Dez 2013 16:01

AW: Brennende Hinweise (FMX-Hints - THintManager 1.3)
 
When compiled with XE5(same with XE4) there are several compile errors:
Code:
    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
If needed, I could arrange TeamViewer session.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:41 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