![]() |
Verschiedene Controls an Procedur übergeben
Ich benutze Lazarus im {$mode delphi} für Win 32.
Es geht um eine Routine, der ein Control übergeben wird und dann einige Eigenschaften benutzt und geändert werden. Die wichtigsten Eigenschaften sind "Canvas", "(Show)Hint" und "Caption". Der Routine sollen bei verschiedenen Aufrufen auch verschiedene Controls übergeben werden. Beispiel:
Delphi-Quellcode:
Allerdings kriege ich den Typ für "ACtrlWithCanvas" nicht hin. Benutze ich TControl meckert der Compiler über "dies", nehme ich TGraphicsControl meckert er über "das". Wie kann man das lösen, so dass ich ein beliebiges Control (mit Canvas) übergeben kann, ohne die Routine mit zusätzlichen Übergabe-Parametern aufzublähen? :gruebel:
// Prozedur-Kopf
procedure TForm1.SetShortenedText(ACtrlWithCanvas: T-???; AText: string); // Aufruf-Beispiel SetShortenedText(Label1, 'Mein Text'); SetShortenedText(Panel1, 'Mein Text'); Guido. Edit: Das Problem konnte nicht auf direktem Weg gelöst werden. Ein Workaround wird in diesem ![]() |
AW: Verschiedene Controls an Procedur übergeben
TControl und dann per RTTI schauen ob es die Properties gibt um auf diese Zuzugreifen.
Die nötigen Funktion finden sich hierbei in der Unit Types. Ob du auf Canvas damit kommst könnte evtl. nicht möglich sein da die RTTI nur für published-Properties den Zugriff ermöglicht. Aber falls Lazarus auch die erweiterte RTTI schon kann könntest du schauen ob du darüber den Zugriff hin bekommst. |
AW: Verschiedene Controls an Procedur übergeben
Mn kann auch schauen wo diese Eigenschafften eingeführt wurden und nimmt dieses als Basistyp für den Parameter.
Da Caption aber z.B. schon recht früh vorhanden war, allerdings protected und man demnach eigentlich nicht ran kommt, kann man diesen Typen dennoch nehmen und macht sich das Property sichtbar, über eine eigene Zugriffsklasse oder man castet einfach in "irgendwas", wo es endlich sichtbar ist. Die neue RTTI würde ja auf nahezu alles zugreifen können, aber die vom 2006/TDE ist noch etwas "älter". |
AW: Verschiedene Controls an Procedur übergeben
Zitat:
Zitat:
|
AW: Verschiedene Controls an Procedur übergeben
Im Falle der Caption:
Delphi-Quellcode:
if AControl is TWinControl then TWinControl(AControl).Perform(WM_SETTEXT, ...
|
AW: Verschiedene Controls an Procedur übergeben
Ein Label hat auch eine Caption und ist garantiert kein TWinControl.
|
AW: Verschiedene Controls an Procedur übergeben
Dann musst Du's eben im else-Zweig etwas langwieriger über RTTI behandeln.
|
AW: Verschiedene Controls an Procedur übergeben
Zitat:
Zitat:
Und vielleicht noch eine kleine Erklärung zu der RTTI in Umgangssprache (also für Doofe wie mich :? )? Wie benutzt man die? "If AControl is ..." oder so? Guido. |
AW: Verschiedene Controls an Procedur übergeben
Für die Caption findest Du
![]() |
AW: Verschiedene Controls an Procedur übergeben
Zitat:
Zitat:
Aaaaber, ... wie gesagt steh ich auf dem Schlauch, wie's weitergehen soll. Ich kann prüfen, ob die Funktionen vorhanden sind, aber wie kann ich drauf zugreifen? Und welcher Kassentyp soll an meine Routine übergeben werden? TObject? Guido. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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