AGB  ·  Datenschutz  ·  Impressum  







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

Einführung in Pointer

Ein Thema von El Cattivo · begonnen am 7. Apr 2005 · letzter Beitrag vom 18. Jan 2007
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#21

Re: Einführung in Pointer

  Alt 8. Apr 2005, 16:34
Zeig mal den code her, bei mir gibts kein Fehler. Btw das "@" kannst du weglassen, klassen werden immer als referenz übergeben
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#22

Re: Einführung in Pointer

  Alt 8. Apr 2005, 16:35
Mal eine Frage:

Seid ihr Geschichtsforscher?

Oder programmiert ihr mit Turbo Pascal 5.0?

Zeiger braucht man heutzutage in Delphi so gut wie gar nicht mehr. Records auch nicht. Das wurde alles extrem vereinfacht und hier scheint es niemand mitbekommen zu haben.

Benutzt einfach Klassen und macht euch über Pointer keine Gedanken.

Natürlich ist es hilfreich zu wissen, wie das funktioniert, aber wie gesagt: Borland hat da in den letzten Generationen viel vereinfacht. Ihr benutzt ja auch schon die IDE und nicht den vi, oder? Und die Icons unter Windows und nicht die Kommandozeile, oder? Will heissen: Manchmal sind Kommandozeile, vi und Pointer sehr mächtig, aber in der Regel kommt man auch ohne aus. Und fährt besser damit (die Programme werden lesbarer und die eigene Fehlerquote verringert sich).
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#23

Re: Einführung in Pointer

  Alt 8. Apr 2005, 16:40
Und gleich im Anschluß eine Antwort hierauf:

Zitat von DGL-luke:
Delphi-Quellcode:
//globale vars
var currentbox:^TListBox;

procedure TForm1.LBbeforeMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
currentbox:=@sender;

end;

procedure TForm1.deleteClick(Sender: TObject);
begin
currentbox^.DeleteSelected;
end;
wieso wirft mir das ne AV??
Ist doch klar: TListBox ist eine Klasse, also abgeleitet von TObject und damit von Borland soweit vereinfacht, dass Sender schon selbst ein Zeiger auf die Listbox ist. CurrentBox := @Sender setzt dann CurrentBox auf die Adresse des Zeigers, der auf die Listbox zeigt. Damit ist CurrentBox^.DeleteSelected Schwachsinn, denn eigentlich müsste es heissen (CurrentBox^)^.DeleteSelected.

Wie gesagt: Borland hat das alles vereinfacht (schon vor Jahren) und seitdem geht's so:

Delphi-Quellcode:
//globale vars
var currentbox: TListBox;

procedure TForm1.LBbeforeMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  currentbox := sender;
end;

procedure TForm1.deleteClick(Sender: TObject);
begin
  currentbox.DeleteSelected;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#24

Re: Einführung in Pointer

  Alt 8. Apr 2005, 16:48
Das weiss er selbst. Er möchte es aber mit Pointern versuchen um Selbige zu kapieren. Zum üben ist das ganz gut. Ich denke kaum das er das in _diesem_ Fall wirklich so am Ende macht.
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#25

Re: Einführung in Pointer

  Alt 8. Apr 2005, 17:03
doch ich hatte genau das so vor.
ich habe nämlich drei listboxen, ein popup und ein deletclick. -> nur eine zeile code für drei sachen. ist doch schön, oder?(eingentlich sinds ja vier zeilen.... )

und warum macht borland solche verienfachungen? damit ein armer noob in AVs ertrinkt....

EDIT: wieso erzählt ihr mir hier jetzt schwachsinn?

die version von bttb930 geht nämlich kein stück..... hab jetzt nämlich seinen code, und currentbox und sender sind absoult inkmpatibel. dacht ich mirs doch....([Fehler] Unit1.pas(59): E2010 Inkompatible Typen: 'TListBox' und 'TObject')

...
werd ichs wohl doch selber rausfinden müssen. also das enttäuscht mich jetzt wirklich....
Lukas Erlacher
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#26

Re: Einführung in Pointer

  Alt 8. Apr 2005, 17:13
naja, getestet hab ich den code nicht, aber dann schreib einfach

Delphi-Quellcode:
if Sender is TListBox then
  CurrentBox := Sender as TListBox;
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#27

Re: Einführung in Pointer

  Alt 8. Apr 2005, 17:16
dir ist aber schon klar, dass ich nen pointer habe, also mit den "echten" listboxen auf meinem formular arbeiten will udn nicht mit der kopie davon, die dann in meinem currentbox gespeichert ist?

ich poste mal das projekt hier(nur source; sollte aber mit D2005 sofort kompilieren; selbsterklärend; kann man mit D2005 abwärtskompatibel projekte speichern?)
Angehängte Dateien
Dateityp: rar test_386.rar (2,6 KB, 4x aufgerufen)
Lukas Erlacher
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#28

Re: Einführung in Pointer

  Alt 8. Apr 2005, 17:17
Ja, Du hast dann einen Pointer und keine Kopie.

Übrigens ist dies ein gutes Beispiel dafür, dass durch die Änderung von Borland Fehler schon beim Compilieren gefunden werden. Denn den Zeiger hättest Du einfach zuweisen können, ohne Typprüfung, d.h. Du hättest auch den Zeiger der eigentlich auf eine TListBox zeigen soll auf einen TButton zeigen lassen können - und dann krachts. So wie ich's gemacht hab geht das aber nicht - da meckert der Compiler spätestens bei der Zuweisung.

Wichtig ist natürlich das "if Sender is TListBox" vor dem "... := Sender as TListBox", denn ohne diese Prüfung kracht's doch wenn Sender mal keine TListBox ist.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#29

Re: Einführung in Pointer

  Alt 8. Apr 2005, 17:25
Zitat:
Wichtig ist natürlich das "if Sender is TListBox" vor dem "... := Sender as TListBox", denn ohne diese Prüfung kracht's doch wenn Sender mal keine TListBox ist.
das is mir klar, soweit bin ich auch schon.

könntest du dann bitte den source oben zum laufen bringen?

wäre dir sehr dankbar.

ps: im moment ist es nur so implementiert, dass es nur für eine listbox funktioniert. ich bin kein noob, und kriege das dann schon hin, auf auf die anderen listboxen das onclick zu setzen....

EDIT: es funktioniert wirklich...... omg sry dass ich so misstrauisch war. aber das ist doch nicht normal dass eine ganz normale globale variable einfach so zum pointer wird....
Lukas Erlacher
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#30

Re: Einführung in Pointer

  Alt 8. Apr 2005, 17:52
Zitat von DGL-luke:
aber das ist doch nicht normal dass eine ganz normale globale variable einfach so zum pointer wird....
was ist schon normal?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 11:48 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