Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeiger auf Inhalt von TEdit TComboBox (https://www.delphipraxis.net/125873-zeiger-auf-inhalt-von-tedit-tcombobox.html)

geskill 13. Dez 2008 18:36


Zeiger auf Inhalt von TEdit TComboBox
 
Gibt es eine Möglichkeit einen Zeiger auf den Inhalt von einem Eingabefeld zu setzten? Sodass ich diesen nutzen kann um an den Inhalt zu kommen.

Delphi-Quellcode:
Edit1.Text := 'Hallo';

Zeiger := Edit1.Text;

Edit1.Text := 'Hi';

ShowMessage(Zeiger); // ==> 'Hi'

SirThornberry 13. Dez 2008 18:40

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Einen Zeiger im Sinne eines Pointers gibt es nicht da der Buffer intern per Api-Funktion abgerufen wird. Aber wenn ich mich nicht irre haben beide Komponenten den gleichen vorfahren so das du über einen Cast auf diesen die Eingeschaft Text abfragen kannst.

geskill 13. Dez 2008 19:28

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Hmm... schade wollte damit gerade das Typecast"en" vermeiden, denn Memo und Fremdkomponenten kommen noch dazu.

SirThornberry 13. Dez 2008 19:30

Re: Zeiger auf Inhalt von TEdit TComboBox
 
hat das Memo nicht auch als gemeinsamen Vorfahren das TCustomEdit?
Zudem müsstest du die Pointer auf den Text ja auch vorher ermitteln. Entsprechend kannst du auch einfach eine Funktion machen die ein TControl übergeben bekommt und in der Funktion ermittelst du dann was für ein Typ es ist und reagierst entsprechend darauf.

alzaimar 13. Dez 2008 19:33

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Du versuchst, den Sinn der Kapselung zu umgehen. Das kann *nur* mit Tricks funktionieren.

geskill 13. Dez 2008 19:50

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Das mit einer Funktion dafür ist klasse danke ;)

Wenn jemand vor dem gleichen Problem steht:
Delphi-Quellcode:
FUNCTION GetContentFromTControl(AControl:TControl):String;
BEGIN
  IF (AControl IS TLabel)
    THEN result := TLabel(AControl).Caption;

  IF (AControl IS TEdit)
    THEN result := TEdit(AControl).Text;

  IF (AControl IS TComboBox)
    THEN result := TComboBox(AControl).Text;

  IF (AControl IS TMemo)
    THEN result := TMemo(AControl).Lines.Text;


  {IF (AControl IS TRzButtonEdit)
    THEN result := TRzButtonEdit(AControl).Text;}
END;
Aufruf:
Delphi-Quellcode:
ShowMessage(GetContentFromTControl(Edit1));

alzaimar 13. Dez 2008 20:01

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Das das bei anderen Komponenten, insbesondere von Drittanbietern nicht funktioniert, sollte klar sein.

sx2008 13. Dez 2008 20:15

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Man kann auch über RTTI ein String-Property mit einem bestimmten Namen auslesen.
Das funktioniert dann für alle Komponenten.
Ich finde nur der bescheidenen D2007 Hilfe gerade die Funktion nicht.
Aber im Prinzip so:
Delphi-Quellcode:
if IsPublishedProp(control, 'Text') then
   Result := GetStrProp(control,'Text')
else if IsPublishedProp(control, 'Lines') then
   Result := (GetObjProp(control, 'TStrings') as TStrings).Text;

SirThornberry 13. Dez 2008 20:45

Re: Zeiger auf Inhalt von TEdit TComboBox
 
Zitat:

Zitat von alzaimar
Das das bei anderen Komponenten, insbesondere von Drittanbietern nicht funktioniert, sollte klar sein.

Bezog sich das auf den zuletzte geposteten Quelltext vom Fragesteller?

@geskill: Wenn du mit "else" arbeitest werden die restlichen Bedingungen nicht geprüft sobald eine zutrifft.


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