AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hint überschreiben

Ein Thema von Rainer Wolff · begonnen am 3. Aug 2010 · letzter Beitrag vom 4. Aug 2010
Antwort Antwort
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#1

Hint überschreiben

  Alt 3. Aug 2010, 11:19
Delphi-Version: 2006
Hallo,

ich würde gerne bei einigen eigenen Komponenten die Eigenschaft Hint so überschreiben, dass ich zur Entwurfszeit einen Hint setze, der aber zur Laufzeit mit zusätzlichen Angaben ergänzt wird.

Hint ist ja in TWincontrol so definiert:
  property Hint: string read FHint write FHint; Ich hätte nun gern sowas:
Delphi-Quellcode:
TMyComponent = class(TWinControl)
published
  property Hint: string read GetHint;
end;

TMyComponet.GetHint: string;
begin
  result:=FHint+' Mein zusätzlicher Text';
end;
Das Überschreiben grundsätzlich geht ja, wenn ich im Quelltext den Hint abfrage, erhalte ich auch den erweiterten Text, allerdings wird zur Laufzeit nur der Grundtext als Hint angezeigt.

Kann ich dies auf Komponentenebene lösen, oder bleibt hier nur der Umweg über eine ApplicationEvents-Komponente, in der ich den Hint entsprechend modifiziere?

Geändert von mkinzler ( 3. Aug 2010 um 11:37 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: Hint überschreiben

  Alt 3. Aug 2010, 11:54
Du willst also im IDE-Editor den Hint ohne den Zusatz-Text haben, zur Laufzeit aber mit?
Dann ist ComponentState dein Freund

Hier ein Beispiel mit einer TEdit-Ableitung:

Delphi-Quellcode:
unit my_hintedit;

interface

uses
  Classes,StdCtrls
;

type
  TmyHintEdit = class(TEdit)
    private
      FHint: string ;
      function GetHint(): string ;
    public
      constructor Create(AOwner: TComponent) ; override ;
    published
      property Hint read GetHint write FHint ;
  end;

procedure Register;

implementation

// Constructor
constructor TmyHintEdit.Create(AOwner: TComponent);
begin
   inherited Create(AOwner);
end;

// Get hint (without additional Text in IDE, with additional text at runtime)
function TmyHintEdit.GetHint(): string;
begin
   // in IDE
   if (csDesigning in ComponentState) then
    Result := FHint
    // at runtime
   else
    Result := FHint + ' <Zusatz-Text>' ;
end;

// Register the new control in a toolbar
procedure Register;
begin
   RegisterComponents('My Controls', [TmyHintEdit]);
end;

end.
Natürlich würd ich an deiner Stelle den Zusatz-Text auch noch dynamisch setzen, aber das ist ja ein Kinderspiel

Geändert von blackfin ( 3. Aug 2010 um 12:19 Uhr)
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Hint überschreiben

  Alt 3. Aug 2010, 13:12
Ausprobiert hab ichs, aber tun tuts nicht.

Wenn ich den Hint direkt auslese(z.b. Form.Caption:=MyEdit.Hint), wird er, wie in meinem Beispiel auch, richtig zugewiesen. Wenn ich mit der Maus über das Edit fahre, sehe ich jedoch nichts.
Ich denke, da auch hier nichts mit overload deklariert wird, greift die VCL auf alle Components als TWinControl zu (cast) und dadurch wird der Hint der Basisklasse im Hintfenster angezeigt, der ja aber im Beispiel nicht gesetzt wird, da in der vererbten Klasse ein neuer Hint definiert wird.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#4

AW: Hint überschreiben

  Alt 3. Aug 2010, 13:19
Eine dumme Frage: ShowHint hast Du aber auf true gesetzt, oder?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

AW: Hint überschreiben

  Alt 3. Aug 2010, 13:25
Ah, stimmt...er hat recht.
Das Mouseover funktioniert nicht mehr, sobald man Hint überschreibt.
Wenn man im Constructor die Property mit inherited überschreibt, gehts auch nicht.
Mal überlegen....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hint überschreiben

  Alt 3. Aug 2010, 13:57
Funktioniert es so?
Delphi-Quellcode:
type
  TmyHintEdit = class(TEdit)
  private
    function GetHint: string;
    procedure SetHint(const value: string);
  published
    property Hint: string read GetHint write SetHint;
  end;

...

function TmyHintEdit.GetHint: string;
begin
  Result := inherited Hint;
end;

procedure TmyHintEdit.SetHint(const value: string);
begin
  if not (csDesigning in ComponentState) then
    inherited Hint := value + ' Test'
  else
    inherited Hint := value;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:13 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 by Thomas Breitkreuz