Delphi-PRAXiS
Seite 1 von 2  1 2      

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)

cherry 26. Feb 2009 14:17


pointer auf TButton - verständtnis problem
 
hallo

ich habe folgenden code:

Delphi-Quellcode:

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

  ...

var
  Tabs: array of Tabulator;

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

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

  Tabs[current].P := @NewButton;
  Tabs[current].hwnd := hwnd;
end;

function TForm1.RemoveTab(hwnd: Cardinal): Boolean;
var
  I: Integer;

begin
  result := false;
  for I := 0 to Length(Tabs) -1 do
  begin
    if Tabs[i].hwnd = hwnd then
    begin

      Tabs[i].P^.Caption := 'homo'; <--- Zugriffsverletzung !!!
//      Tabs[i].hwnd := 0;
//      Tabs[i].P := nil;
      result := True;
      break;
    end;
  end;
end;
Habe die Zeile markiert wo ich die "Zugriffsverletzung" erhalte. Irgendwas ist mir noch nicht ganz klar mit pointern...
Kann mit jmd helfen? Warum kriege ich da eine Zugriffsverletzung?

himitsu 26. Feb 2009 14:28

Re: pointer auf TButton - verständtnis problem
 
TButton ist im Prinzip schon ein Pointer ... nimm einfach direkt TEButton.

Delphi-Quellcode:
Tabulator = record
  hwnd: THandle; // contains handle of a window
  P: TEButton; // contains pointer of the tabulator button
end;
Delphi-Quellcode:
Tabs[current].P := NewButton;

Tabs[i].P.Caption := 'homo';
PS: @NewButton zeigt auf die Variable NewButton und nicht auf den Button selbst und diese Variable gibt es nicht mehr, nachdem die Prozedur dazu beendet wurde.

mkinzler 26. Feb 2009 14:29

Re: pointer auf TButton - verständtnis problem
 
Ein TButton ist schon eine Referenz (Zeiger)

cherry 26. Feb 2009 14:30

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

Zitat von himitsu
TButton ist im Prinzip schon ein Pointer ... nimm einfach direkt TEButton.

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

hmm, kappier ich nicht?! wieso ist das schon ein Pointer? und trotzdem, warum geht meine version nicht?

himitsu 26. Feb 2009 14:32

Re: pointer auf TButton - verständtnis problem
 
Eine Objektinstanz ist sozusagen ein Zeiger auf die Daten des Objektes.

[info] hatte oben etwas dazueditiert :zwinker:

cherry 26. Feb 2009 14:34

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

Zitat von himitsu
Eine Objektinstanz ist sozusagen ein Zeiger auf die Daten des Objektes.

[info] hatte oben etwas dazueditiert :zwinker:

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

mkinzler 26. Feb 2009 14:35

Re: pointer auf TButton - verständtnis problem
 
Für Klassen nicht.

cherry 26. Feb 2009 14:36

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

Zitat von mkinzler
Für Klassen nicht.

Also zum Beispiel für Typen und Variablen dann?

Neutral General 26. Feb 2009 14:37

Re: pointer auf TButton - verständtnis problem
 
Für elementare Datentypen und für Records brauch man sie ggf.

cherry 26. Feb 2009 14:38

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

Zitat von Neutral General
Für elementare Datentypen und für Records brauch man sie ggf.

hmm, also sind Pointer in Delphi eher selten?!


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

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