Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi pointer auf TButton - verständtnis problem (https://www.delphipraxis.net/129836-pointer-auf-tbutton-verstaendtnis-problem.html)

Meflin 26. Feb 2009 14:43

Re: pointer auf TButton - verständtnis problem
 
Zitat:

Zitat von cherry
hmm, also sind Pointer in Delphi eher selten?!

Korrekt, deswegen mögen wir es ja so :mrgreen:

cherry 26. Feb 2009 14:45

Re: pointer auf TButton - verständtnis problem
 
Ok, dann hab ich ja wieder was gelernt. Also nochmal, wenn ich einer Procedure den Sender als TObject übergebe, ist das auch ein "Pointer" ? (Weil ja TObject auch eine Klasse ist)

himitsu 26. Feb 2009 14:49

Re: pointer auf TButton - verständtnis problem
 
Jupp, so isses. :angel:


Du kannst (wenn du unbedingt willst) ein Objekt auch über einen Pointer ansprechen, aber dann mußt du auch einen Speicherplatz (für die Objekt-Variable) nutzen, welcher nicht gelöscht wird.


Delphi-Quellcode:
type
  PEButton = ^TEButton;
  Tabulator = record
    hwnd: THandle; // contains handle of a window
    P: PEButton;  // contains pointer of the tabulator button
  end;

  ...

procedure TForm1.AddTab(name: String; hwnd: THandle; FormCount: Integer);
var
  Current: Integer;
  NewButton: PEButton;
begin
  // increase pointer array
  SetLength(Tabs, Length(Tabs) + 1);
  Current := Length(Tabs)-1;

  // create button, positionize button
  New(NewButton);
  NewButton := TEButton.Create(Form1);
  NewButton.Parent := ToolBar1;
  NewButton.OnClick := OnTabButtonClick;

  Tabs[current].P := @NewButton;
  Tabs[current].hwnd := hwnd;
end;
und Freigeben dann z.B. so:
Delphi-Quellcode:
Tabs[i].P^.Free;
Dispose(Tabs[i].P);
aber direkt über die Objektinstanz isses natürlich einfacher/schöner :angel2:

Cyf 26. Feb 2009 15:31

Re: pointer auf TButton - verständtnis problem
 
Zitat:

Zitat von cherry
hmm, wenn das so ist für was braucht man dann Pointer in Delphi überhaupt? (also ich meine selbst "erstellte")

Für Abstrakte Datentypen, wie z.B. verkettete Listen, Binärbäume und nen paar andere und in einigen speziellen Fällen, wo Lösungen ohne Pointer nicht oder nur unschön gehen. Hinzu kommt noch die Übergabe von Strings an API-Schnittstellen und .dll oder wenn man aus irgendwelchen Gründen meint, direkt im virtuellen Speicher rumhantieren zu müssen. Die meisten Pointer in Delphi werden automatisch verwaltet und hinter Dingen wie var, const, Arrays und Objekten versteckt.

cherry 26. Feb 2009 15:33

Re: pointer auf TButton - verständtnis problem
 
Danke euch allen. Das ist die Erleuchtung des Tages für mich. :stupid: ne im Ernst. Gut zu wissen.

schöner Tag noch

himitsu 26. Feb 2009 15:35

Re: pointer auf TButton - verständtnis problem
 
Strings, dynamische Arrays und Objekte arbeiten sozusagen mit Pointern, nur daß an sich als Programmier da um nichts kümmern muß (macht Delphi automatisch).
Und bei den Funtions-Parametern, sowie noch einigen anderen Dingen, macht Delphi auch sehr viel automatisch.

ich weiß ja nicht wie sehr du dich z.B. in C auskennst, aber da muß man schon recht viel selber machen. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Seite 2 von 2     12   

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