Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   Verschiedene Controls an Procedur übergeben (https://www.delphipraxis.net/164048-verschiedene-controls-procedur-uebergeben.html)

Guido Eisenbeis 27. Okt 2011 05:16


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:
  // Prozedur-Kopf
  procedure TForm1.SetShortenedText(ACtrlWithCanvas: T-???; AText: string);


  // Aufruf-Beispiel
  SetShortenedText(Label1, 'Mein Text');
  SetShortenedText(Panel1, 'Mein Text');
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:

Guido.

Edit: Das Problem konnte nicht auf direktem Weg gelöst werden. Ein Workaround wird in diesem Thread behandelt.

Bernhard Geyer 27. Okt 2011 06:05

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.

himitsu 27. Okt 2011 06:53

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".

Bernhard Geyer 27. Okt 2011 07:34

AW: Verschiedene Controls an Procedur übergeben
 
Zitat:

Zitat von himitsu (Beitrag 1132750)
... aber die vom 2006/TDE ist noch etwas "älter".

Er nimmt für dieses Anwendungsfall Lazarus:
Zitat:

Ich benutze Lazarus im {$mode delphi} für Win 32.

ConnorMcLeod 27. Okt 2011 07:49

AW: Verschiedene Controls an Procedur übergeben
 
Im Falle der Caption:
Delphi-Quellcode:
if AControl is TWinControl then TWinControl(AControl).Perform(WM_SETTEXT, ...

DeddyH 27. Okt 2011 07:53

AW: Verschiedene Controls an Procedur übergeben
 
Ein Label hat auch eine Caption und ist garantiert kein TWinControl.

ConnorMcLeod 27. Okt 2011 08:01

AW: Verschiedene Controls an Procedur übergeben
 
Dann musst Du's eben im else-Zweig etwas langwieriger über RTTI behandeln.

Guido Eisenbeis 27. Okt 2011 08:18

AW: Verschiedene Controls an Procedur übergeben
 
Zitat:

Zitat von DeddyH (Beitrag 1132761)
Ein Label hat auch eine Caption und ist garantiert kein TWinControl.

Richtig. :mrgreen: (Hab ich gerade hierbei erfahren müssen.)

Zitat:

Zitat von Bernhard Geyer (Beitrag 1132748)
TControl und dann per RTTI schauen ob es die Properties gibt um auf diese Zuzugreifen.

So, jetzt isses passiert: Ich gehör zum alten Eisen und bin eingerostet! :oops: Die RTTI kenne ich nicht (hab's aber gerade auf Wikipedia nachgescehen) und stehe auf dem Schlauch. :gruebel: Kannst du das mal anders erklären? Meinst du, ich soll nachsehen, ob das übergebene TControl die Eigenschaften Canvas, Hint, Caption, ... hat? Und dann?

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.

DeddyH 27. Okt 2011 08:22

AW: Verschiedene Controls an Procedur übergeben
 
Für die Caption findest Du hier ein Delphi-Beispiel (Unit TypInfo muss eingebunden werden). Inwiefern das mit Lazarus funktioniert weiß ich allerdings nicht.

Guido Eisenbeis 27. Okt 2011 08:49

AW: Verschiedene Controls an Procedur übergeben
 
Zitat:

Zitat von DeddyH (Beitrag 1132772)
Für die Caption findest Du hier ein Delphi-Beispiel (Unit TypInfo muss eingebunden werden).

Prima, funktioniert gut. Danke für die Funktion! Ich denke, die kann ich noch öffter gebrauchen. :thumb:

Zitat:

Zitat von DeddyH (Beitrag 1132772)
Inwiefern das mit Lazarus funktioniert weiß ich allerdings nicht.

Funktioniert! :)

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 15:29 Uhr.
Seite 1 von 3  1 23      

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