Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einführung in Pointer (https://www.delphipraxis.net/43704-einfuehrung-pointer.html)

Pseudemys Nelsoni 8. Apr 2005 16:34

Re: Einführung in Pointer
 
Zeig mal den code her, bei mir gibts kein Fehler. Btw das "@" kannst du weglassen, klassen werden immer als referenz übergeben

bttb930 8. Apr 2005 16:35

Re: Einführung in Pointer
 
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).

bttb930 8. Apr 2005 16:40

Re: Einführung in Pointer
 
Und gleich im Anschluß eine Antwort hierauf:

Zitat:

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;

Pseudemys Nelsoni 8. Apr 2005 16:48

Re: Einführung in Pointer
 
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.

DGL-luke 8. Apr 2005 17:03

Re: Einführung in Pointer
 
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.... :D)

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

bttb930 8. Apr 2005 17:13

Re: Einführung in Pointer
 
naja, getestet hab ich den code nicht, aber dann schreib einfach

Delphi-Quellcode:
if Sender is TListBox then
  CurrentBox := Sender as TListBox;

DGL-luke 8. Apr 2005 17:16

Re: Einführung in Pointer
 
Liste der Anhänge anzeigen (Anzahl: 1)
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?)

bttb930 8. Apr 2005 17:17

Re: Einführung in Pointer
 
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.

DGL-luke 8. Apr 2005 17:25

Re: Einführung in Pointer
 
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....

bttb930 8. Apr 2005 17:52

Re: Einführung in Pointer
 
Zitat:

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?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.
Seite 3 von 4     123 4      

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