Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi HilfeText- OnMouseEnter (Array?) (https://www.delphipraxis.net/108128-hilfetext-onmouseenter-array.html)

aayb 7. Feb 2008 12:36


HilfeText- OnMouseEnter (Array?)
 
Hallo zusammen,

ein kleines Problem hindert mich momentan meine ToDo-Liste abzuarbeiten :)

Kurz zur Beschreibung:
* Es gibt viele TEdit- Felder fuer die Eingabe (Logisch ;))
* Geht der Nutzer nun mit der Maus ueber diese Eingabe soll ein Hilfetext erscheinen.
(Das ganze soll allerdings nicht mit "Hint" geloest werden (Man muss zu lange warten - es liest kaum einer))
* Der Hilfetext steht in einem extra dafuer angelegten TMemo-Feld

- Soweit klappt natuerlich alles

Ich habe alle TEdit-Felder mit der OnMouseEnter- Funktion auf eine Prozedur (OnMouseOverHelp) ausgestattet.
Diese sieht momentan, ganz simpel beispielhaft fuer 2 Felder so aus:
Delphi-Quellcode:
procedure TForm1.OnMouseOverHelp(Sender: TObject);
begin
 if (sender as tcomponent).name = 'eingabe1' then
  MemoHelp.Text := 'Hilfetext 1 - Test 1 2 3 4 5'
 else if (sender as tcomponent).name = 'eingabe2' then
  MemoHelp.Text := 'Hilfetext 2 - Test 6 7 8 9 0';
end;
Stellt man sich das ganze fuer 30-40 Felder vor, ist es natuerlich total unuebersichtlich.

Meine Idee war jetzt, das ganze in ein Array, bzw. eine Switch-Case zu setzen.

Problem 1)
So weit mir bekannt ist, kann ich Arrays aber nicht ueber array['eingabe1'] ansprechen - sondern nur ueber array[1].
(Egal ob das Array aus Strings oder Integer besteht)

Problem 2)
Das gleiche gilt fuer Switch-Case. Auch hier kann ich nur ueber Integer gehen.

Eine Moeglichkeit waere, das Switch-Case zu verbiegen - Hier habe ich schon einige Ansaetze gesehen, wie man dieser Funktion auch Strings beibringt. Ist das ganze wirklich so sauber? :)

Gibt es denn Moeglichkeiten, das Array per Namen anzusprechen? Alternativen?
Wie koennte man das Problem noch schoener loesen?

Bin natuerlich fuer jede Hilfe Dankbar!

Gr.
aayb

shmia 7. Feb 2008 12:41

Re: HilfeText- OnMouseEnter (Array?)
 
Genial einfach:
Delphi-Quellcode:
procedure TForm1.OnMouseOverHelp(Sender: TObject);
begin
  if sender is Tcontrol then
    MemoHelp.Text := TControl(Sender).Hint;
end;
Nachtrag: du kannst auch 2 verschiedene Hinttexte hinterlegen.
Und Hints auf der Statusleiste werden immer sehr gerne genommen.

Delphi-Quellcode:
procedure TForm1.OnMouseOverHelp(Sender: TObject);
begin
  if sender is Tcontrol then
  begin
    MemoHelp.Text := GetLongHint(TControl(Sender).Hint);
    Statusbar.SimpleText := GetShortHint(TControl(Sender).Hint);
  end
  else
  begin
    MemoHelp.Text := '';
    Statusbar.SimpleText := '';
  end
end;

aayb 7. Feb 2008 13:30

Re: HilfeText- OnMouseEnter (Array?)
 
Hm. Haette man drauf kommen koennen.
Die Idee ist schonmal genial :)

Ich haette es wohl dazu schreiben sollen, hatte ich allerdings eben nicht dran gedacht.

Der Text wird aus dem Hint-Feld genommen. Nun wuerde ich darueber gern noch eine Uebschrift setzen.
Also sinngemaeß wuerde nun im Hint-Feld stehen:
"Benutzername#13#10Bitte geben Sie Ihren Benutzernamen ein"

Und in dem Memo wuere dann erscheinen:
Benutzername:
Bitte geben Sie Ihren Benutzernamen ein.

Ich muesste das ganze also nun mit MemoHelp.Lines.Add() realisieren, da ich mit Text keine Zeilenumbruech hinbekomme (Richtig?).

Nur - wie definiere ich nun den Namen des Eingabefeldes? Der einzige Text den ich nun habe, kommt aus dem Hint-Feld.
Wuerde ich "MemoHelp.Lines.Add((sender as tcomponent).name);" vor die Funktion setzen, kommt schlussendlich folgendes dabei raus:

eingabefeld1
Benutzername#13#10Bitte geben Sie Ihren Benutzernamen ein

Als Idee haette ich spontan, das Hint-Feld zu vor dem Lines.Add zu zerschneiden.
Beispiel des Hint-Feldes:
Benutzername||Bitte geben Sie Ihren Benutzernamen ein

Ich jage - gesplittet durch "||" - alle Einzelteile in ein Array und fuege diese dann per Lines.Add in das Memo.

Ich hoffe es war einigermaßen verstaendlich ausgedrueckt.
Evtl. hast du auch hier eine Klasse Idee?

Besten Dank schonmal!

Gr.
aayb

aayb 7. Feb 2008 13:32

Re: HilfeText- OnMouseEnter (Array?)
 
Hehe,

ich habe gerade erst deinen Nachtrag gelesen.
Ich denke, das ist schon die Loesung fuer meine Frage gewesen :-)
Ich setze die Ueberschrift in die kurze Hint - und den Text in die lange Hint.

Werd mich mal schlau machen, wie ich die unterschiedlich definieren kann.

:-)

Besten Dank!
Gr.
aayb

shmia 7. Feb 2008 15:12

Re: HilfeText- OnMouseEnter (Array?)
 
Man kann übrigens auch Zeilenumbrüche und Hint- und Caption Properties einfügen.
Dazu muss ein Property-Editor installiert werden.
Diese Komponente hat zwar schon Staub angesetzt, funktioniert aber nach ein paar Änderungen:
http://delphi.icm.edu.pl/ftp/d40free/proped.zip


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