AGB  ·  Datenschutz  ·  Impressum  







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

Frage zu Zeigern

Ein Thema von delphien · begonnen am 31. Jan 2006 · letzter Beitrag vom 31. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
delphien

Registriert seit: 25. Nov 2005
27 Beiträge
 
#1

Frage zu Zeigern

  Alt 31. Jan 2006, 09:44
Hallo,

Ich habe einen Zeiger, der auf den Typ TEdit zeigt:

Delphi-Quellcode:
var zeiger: ^pointer;
    ActiveMemo:TEdit;

zeiger := pointer(ActiveMemo);
Wie kann ich jetzt auf den Text von TEdit zugreifen ?
Ich weiß, daß man es anders machen kann, aber ich möchte
mich ein bißchen mit Zeigern beschäftigen.

Danke !

Gruss
DELPHIEN
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 09:56
Deine Deklaration von "zeiger" ist ein Zeiger auf ein Zeiger. Pointer ist schon ein Zeiger und mit dem ^ deklarierst du einen Zeiger auf einen Zeiger. Da du aber nun keinen Speicher alloziierst für deinen Zeiger (auf den gezeigt wird), wird der Verweis auf den Inhalt auch schon hinfällig sein. Und wenn du dann noch auf ein TEdit verweist, dann ist dieses intern auch ein Zeiger - somit hast du dann einen Zeiger, der auf einen Zeiger zeigt welcher wiederrum auf Instanzenzeiger zeigt, welcher auf die TEdit Instanz im Speicher zeigt. Da du dafür mindestens 2x Platz anlegen müsstest für die Zeiger, wird das nicht hinhauen.

Delphi-Quellcode:
Var
  Zeiger: Pointer;
  ActiveEdit: TEdit;

Begin
  // ActiveEdit sollte hier schon existieren

  Zeiger := @ActiveEdit; // Nun zeigt Zeiger auf den Speicherplatz wo ActiveEdit liegt. ActiveEdit ist aber auch nur ein Zeiger der auf die Instanz von TEdit zeigt.

  TEdit(Zeiger^).Text := 'Teschd';
End;
  Mit Zitat antworten Zitat
delphien

Registriert seit: 25. Nov 2005
27 Beiträge
 
#3

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 10:35
vielen dank, damit hast Du mir schon sehr geholfen.
Müßte ich das für TMemo genauso machen oder geht das
auch einfacher ?
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 10:57
die zeiger sind eigendlich nur noch ein mitbringsel aus turbopascal.
in delphi werden diese "eigendlich" nicht mehr benötigt.

denn:
Delphi-Quellcode:
var
  ActiveEdit: TEdit;
ist ein zeiger auf ein edit.

wenn du folgendes machst bekommst du keine 2 edits sondern kannst das eine edit über beide namen ansprechen:
Delphi-Quellcode:
var
  ActiveEdit: TEdit;
  Edit2: TEdit;

begin
  ActiveEdit:=tEdit.Create(self);
  ActiveEdit.Parent:=self;
  Edit2:=ActiveEdit;
  Edit2.text:='Hallo';
  capiton:=ActiveEdit.text;
end;
somit mein tipp: lass die finger von den untypisierten zeigern, da macht man zu schnell fehler rein.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#5

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 13:14
Zitat von Muetze1:
Delphi-Quellcode:
Var
  Zeiger: Pointer;
  ActiveEdit: TEdit;

Begin
  // ActiveEdit sollte hier schon existieren

  Zeiger := @ActiveEdit; // Nun zeigt Zeiger auf den Speicherplatz wo ActiveEdit liegt. ActiveEdit ist aber auch nur ein Zeiger der auf die Instanz von TEdit zeigt.

  TEdit(Zeiger^).Text := 'Teschd';
End;
Das ist eine unnötige Indirektion. So ist es besser:

Delphi-Quellcode:
var
  Zeiger: Pointer;
  ActiveEdit: TEdit;
begin
  Zeiger := ActiveEdit;
  TEdit(Zeiger).Text := 'Teschd';
end;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 14:17
Zitat von Oxmyx:
Zitat von Muetze1:
Delphi-Quellcode:
Var
  Zeiger: Pointer;
  ActiveEdit: TEdit;

Begin
  // ActiveEdit sollte hier schon existieren

  Zeiger := @ActiveEdit; // Nun zeigt Zeiger auf den Speicherplatz wo ActiveEdit liegt. ActiveEdit ist aber auch nur ein Zeiger der auf die Instanz von TEdit zeigt.

  TEdit(Zeiger^).Text := 'Teschd';
End;
Das ist eine unnötige Indirektion. So ist es besser:

Delphi-Quellcode:
var
  Zeiger: Pointer;
  ActiveEdit: TEdit;
begin
  Zeiger := ActiveEdit;
  TEdit(Zeiger).Text := 'Teschd';
end;
Du hast den Code abgeändert. Du setzt den Instanzenzeiger und "Zeiger" gleich, ich habe aber Zeiger auf die Instanzenvariable zeigen lassen. Ich habe hier nicht beides gleich zeigen lassen!

Damit machst du einen Typecast und wandelst den Zeiger "Zeiger" (welcher bei mir nur auf die Variable ActiveEdit zeigt) in einen Instanzenzeiger um. Dies ist aber bei mir anders, da bei mir "Zeiger" nicht auf die Instanz zeigte (also kein Instanzenzeiger ist), sondern auf die Variable "ActiveEdit". Zeiger zeigt bei mir auf den Instanzenzeiger, nicht auf die Instanz. (ich liebe solche Sätze).

Du hast somit was ganz anderes gebaut als ich.
  Mit Zitat antworten Zitat
delphien

Registriert seit: 25. Nov 2005
27 Beiträge
 
#7

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 14:43
Danke für die zahlreichen Antworten.
Es ist nun so, daß ich TEdit-Felder und TMemo-Felder habe
und eigentlich nur den Text benötige.

Einen Zeiger auf das aktuelle Eingabefeld (TEdit oder TMemo)
habe ich. Ich brauche nun den Text. Wie sollte man das machen ?

Delphi-Quellcode:
Var
  Zeiger: Pointer;
  ActiveEdit: TEdit;
  ActiveMemo: TMemo;

Begin
  //für TEdit und TMemo
  
  Zeiger := @ActiveEdit;
  TEdit(Zeiger^).Text := 'Teschd';
 
End;
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 15:21
Einfach so:

Delphi-Quellcode:
Var
  ActiveEdit: TEdit;
  ActiveMemo: TMemo;

Begin
  ActiveEdit.Text := 'Teschd';
End;
"ActiveEdit" ist ein Zeiger auf die Instanz von TEdit. Delphi nimmt dir jedoch beim Zugriff darauf sämtliche Zeigerarbeit ab, so dass du nicht sichtbar mit Zeigern hantierst. Das ganze Rumgecaste und Verpointerschnörksele ist hier komplett unnötig
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 15:51
Delphi-Quellcode:
Var
  ActiveElement: TComponent; // hier einfach entweder TMemo oder TEdit zuweisen

Begin
  If ( ActiveElement Is TMemo ) Then
    TMemo(ActiveElement).Lines.Text := 'Zur Zeit ist es ein Memo'
  Else If ( ActiveElement Is TEdit ) Then
    TEdit(ActiveElement).Text := 'Zur Zeit ist es ein Editfeld'
  Else
    ShowMessage('Irgendwas anderes, aber kein Memo und kein Edit!');
End;
  Mit Zitat antworten Zitat
bioser

Registriert seit: 30. Aug 2005
140 Beiträge
 
#10

Re: Frage zu Zeigern

  Alt 31. Jan 2006, 15:56
Zitat von dizzy:
Einfach so:

Delphi-Quellcode:
Var
  ActiveEdit: TEdit;
  ActiveMemo: TMemo;

Begin
  ActiveEdit.Text := 'Teschd';
End;
"ActiveEdit" ist ein Zeiger auf die Instanz von TEdit. Delphi nimmt dir jedoch beim Zugriff darauf sämtliche Zeigerarbeit ab, so dass du nicht sichtbar mit Zeigern hantierst. Das ganze Rumgecaste und Verpointerschnörksele ist hier komplett unnötig
Achso, das ist natürlich sehr einfach.
Eine Frage noch. In jedem OnEnter-Ereignnis eines TEdit bzw. TMemo
ist folgende Code-Zeile eingefügt:

Delphi-Quellcode:
ActiveEdit := (Sender as TEdit);
bzw.
ActiveMemo := (Sender as TMemo);
Das klappt nun natürlich nicht mehr, wenn ich Deinen Vorschlag einbaue.
Wie könnte ich das jetzt machen ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:40 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