Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Property als Hexadezimal (https://www.delphipraxis.net/73344-property-als-hexadezimal.html)

Martin K 16. Jul 2006 13:30


Property als Hexadezimal
 
Moin,

ich würde gerne bei einer selbst abgeleiteten Komponente eine Eigenschaft im OI im Hexadezimal-Format anzeigen lassen.
Es handelt sich hierbei um die landesspeziefischen Informationen für FormatSettings, die üblicherweise in Hexadezimal dargestrellt werden (z.B. $0407), mit dem Dezimalwert kann da wohl kaum einer was anfangen.
Da der eigentliche Typ Integer ist, weiß ich nicht, wie ich die Anzeige im Hex-Format darstellen kann und IntToHex ist da auch keine wirkliche Lösung.

Bei einer Eigenschaft vom Typ TColor geht das ja auch - wenn nicht gerade eine "Standard-Farbe" eingegeben wird, wird sie im Hex-Format dargestellt.

Wäre nett, wenn irgendjemand dazu eine Idee hätte...

DGL-luke 16. Jul 2006 13:51

Re: Property als Hexadezimal
 
Beim Anzeigen weiß ichs nicht - aber die Eingabe sollte auf jeden Fall mit vorangestelltem $ funktionieren.

Martin K 16. Jul 2006 14:01

Re: Property als Hexadezimal
 
Das ist klar...

Aber es geht mir ja gerade um die Anzeige!
Wie wird das denn bei TColor gemacht ?
TColor ist ja eigentlich auch nichts anderes als ein Integer-Wert....

Mystic 16. Jul 2006 14:05

Re: Property als Hexadezimal
 
Wahrscheinlich ist die hexadezimale Anzeige von TColor hartkodiert.

Martin K 16. Jul 2006 14:09

Re: Property als Hexadezimal
 
Zitat:

Zitat von Mystic
Wahrscheinlich ist die hexadezimale Anzeige von TColor hartkodiert.

Und wie könnte man sowas selber machen :gruebel:

EDatabaseError 16. Jul 2006 14:12

Re: Property als Hexadezimal
 
Du lässt es den User als $.... eingeben und wandelst diesen HexString in eine Dezimal Zahl um.

Martin K 16. Jul 2006 14:16

Re: Property als Hexadezimal
 
Zitat:

Zitat von EDatabaseError
Du lässt es den User als $.... eingeben und wandelst diesen HexString in eine Dezimal Zahl um.

:shock: Die Eingabe ist kein Problem, die wandelt Delphi schon automatisch um...
Es geht vielmehr um die Ausgabe, um die Anzeige.
IntToHex wäre eine Möglichkeit, aber es soll eben kein String sein - sondern eine Integer-Property.

negaH 16. Jul 2006 14:21

Re: Property als Hexadezimal
 
1.) deine Komponente in zwei verschiedene Packages zerlegen. Dein Laufzeit-Package enthält ausschließlich nur deine Komponente. Dein Design-Time Package enthält wie das "Benutzer Package" nun eine Funktion "Register". In dieser wird deine Komponente registriert.
Soweit ist alles erstmal Standard und der vollkommen normale Weg.

2.) nun baust du in einer separaten Unit "MyKomponente_Reg.pas" eigene Property Editoren rein. In dieser Unit steht auch deine Funktion "Register". Diese Funktion erweiterst du nun indem du dort deine eigenen Property Editoren für die Delphi IDE registrierst -> RegisterPropertyEditor() etc.pp. Dein eigener Editor wird nun deine Integer-Property deiner Komponente als HEX String im OI der IDE anzeigen und editieren.
Fertig.

Du erweiterst also selektiv für deine Komponente->Property die Funktionalität der Delphi IDE. Wichtig dabei ist es mit diesen zwei Packages zu arbeiten. Exakt so geht auch der Editor für alle TColor Eigenschaften vor.

Gruß Hagen

Martin K 16. Jul 2006 14:28

Re: Property als Hexadezimal
 
Endlich mal ein Mann vom Fach :thumb:

Werd es gleich mal versuchen,
Danke für Deine Antwort!

EDatabaseError 16. Jul 2006 14:51

Re: Property als Hexadezimal
 
Zitat:

Zitat von Martin K
Zitat:

Zitat von EDatabaseError
Du lässt es den User als $.... eingeben und wandelst diesen HexString in eine Dezimal Zahl um.

:shock: Die Eingabe ist kein Problem, die wandelt Delphi schon automatisch um...
Es geht vielmehr um die Ausgabe, um die Anzeige.
IntToHex wäre eine Möglichkeit, aber es soll eben kein String sein - sondern eine Integer-Property.

Einfach das Dezimale in einen Hexstring umwandeln und dann ein $ davor... ;-)
so mach es ich jedenfalls ;-)

Martin K 16. Jul 2006 14:56

Re: Property als Hexadezimal
 
@negaH
So, hab's probiert und komm nicht weiter bei der Prozedur RegisterPropertyEditor:
Zitat:

Undefinierter Bezeichner: 'RegisterPropertyEditor'
Guck ich in der Delphi-Hilfe unter dieser Prozedur nach:
Zitat:

Unit
DesignIntf
Wenn ich die Unit zur uses-Klausel hinzufüge kommt:
Zitat:

Datei nicht gefunden: 'DesignIntf.dcu'
:gruebel:

@EDatabaseError:
Ja, das meinte ich ja mit IntToHex:
Aber dann ist die Property vom Typ String - ich will aber Integer!
Ist zwar für die Ansicht im OI egal - ob String oder Integer merkt man da ja nicht - aber wenn ich's irgendwo im Code zuordnen oder auslesen will muss ich mit einem String arbeiten...

negaH 16. Jul 2006 14:59

Re: Property als Hexadezimal
 
PACKAGES ist das Zauberwort. Du musst alles mit Packages kompilieren und dein IDE Package in dem du designinft benutzt MUSS ein DesignTime Package sein. Also in den Projektoptionen zum Package das auch bitte auswählen.

Gruß Hagen

Martin K 16. Jul 2006 15:07

Re: Property als Hexadezimal
 
Sorry, hab noch nie mit Packages gearbeitet.
Hab die Komponenten immer in einer Unit gehabt und diese dann über Komponente -> Komponente installieren... installiert.

Wäre nett, wenn Du mir ein kleinen Code-Beispiel geben könntest bzw. geht das nicht in der Prozedur Register meiner Unit?

Wenn's zu kompliziert ist, nehm ich den Vorschlag von Tobias und mach zwei properties:
Eine published für den OI vom Typ String und eine public vom Typ Integer für das Arbeiten im Code...


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