AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Brennende Hinweise (FMX-Hints - THintManager 1.3)
Thema durchsuchen
Ansicht
Themen-Optionen

Brennende Hinweise (FMX-Hints - THintManager 1.3)

Ein Thema von himitsu · begonnen am 9. Aug 2012 · letzter Beitrag vom 12. Dez 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu Online
Registriert seit: 11. Okt 2003
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...





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
Miniaturansicht angehängter Grafiken
unbenannt.png   unbenannt2.png   _unbenannt3.jpg  
Angehängte Dateien
Dateityp: 7z Project9.7z (1,20 MB, 66x aufgerufen)
Dateityp: 7z HintManager.7z (93,8 KB, 72x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (24. Okt 2012 um 14:50 Uhr)
 
Benutzerbild von s.h.a.r.k
s.h.a.r.k
 
#2
  Alt 9. Aug 2012, 10:28
Gibts auch einen Screenshot?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#3
  Alt 9. Aug 2012, 10:53
Du wirst doch wohl wissen wie ein Hint aussehn könnte?
Aber OK, da die Firemonleyleute sowas noch nicht kennen, bekommst du Einen.



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.

Geändert von himitsu ( 9. Aug 2012 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k
 
#4
  Alt 9. Aug 2012, 11:35
Jo, wie normale Hints aussehen, das weiß ich aber mir ging es dabei eher um die BRENNENDEN Hinweise Dachte, dass die vielleicht komplett Abfackeln oder so, daher die Frage.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#5
  Alt 9. Aug 2012, 11:39
Das geht bestimmt auch ... man müßte nur eine feuerähnliche Animation dranhängen.
Aber für den Anfang kannst du im HintManager den Shaddow deaktivieren und einen rot-gelben Glow aktivieren.

FireMonkey (Grillaffe)

Geändert von himitsu ( 9. Aug 2012 um 11:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#6
  Alt 10. Aug 2012, 09:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#7
  Alt 10. Aug 2012, 14:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#8
  Alt 11. Aug 2012, 02:27
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?
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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

 
Delphi 12 Athens
 
#9
  Alt 18. Aug 2012, 00:33
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;
  Mit Zitat antworten Zitat
Goaul
 
#10
  Alt 23. Sep 2012, 12:25
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?

Geändert von Goaul (23. Sep 2012 um 12:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:18 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