AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zugriffsverletzung bei zuweisung von Self

Ein Thema von franktron · begonnen am 5. Nov 2007 · letzter Beitrag vom 5. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2   
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 13:44
Delphi-Quellcode:
//Hier die Klasse
Tonl_kaltermin = class(TPanel)
   private
    Fuserid: Longint;
    Fvon: TDateTime;
    Fbis: TDateTime;
    Ftitle: String;
    procedure Setbis(const Value: TDateTime);
    procedure Setuserid(const Value: Longint);
    procedure Setvon(const Value: TDateTime);
    procedure Settitle(const Value: String);
   public
      { Public-Deklarationen }
      Constructor Create(AOwner: TComponent); override;
      Destructor Destroy; override;
   published
      property von      : TDateTime read Fvon write Setvon;
      property bis      : TDateTime read Fbis write Setbis;
      property userid : Longint read Fuserid write Setuserid;
      property title   : String read Ftitle write Settitle;

      property Width;
      property Height;
      property Top;
      property Left;
      property Visible;
      property Color;
   End;

//Hier der aufruf
FNewtermin:=Tonl_kaltermin.Create(Self);
      FNewtermin.Parent:=Self; <= Hier kommt immer ein Fehler (mit Nil gehts)
      FNewtermin.Color:=clBlack;
      FNewtermin.Left:=x;
      FNewtermin.Top:=y;
Also wenn ich den Code oben ausführe kommt immer eine Zugriffsverletzung 00000 x 00000 u.s.w.

was habe ich falsch gemacht (mit anderen Klassen gehts (z.b. TPainbox) nur mit der nicht mit TPanel gehts auch
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 13:46
Ein Objekt kann nicht der Parent von sich selber sein ...
Oder wer ist in dem Fall Self? ^^
Chris
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 13:48
Ist es ja auch nicht Self ist die Kombo in der ich das Panel erstellen will.
Habs schon mit Self.Name getestet
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 13:51
Ja wo "drin" steht denn der betroffene Code? Zeig mal ein bisschen mehr ^^
Chris
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 14:45
Delphi-Quellcode:
Tonl_kalender = class(TWinControl)
   private
    FHGColor: TColor;
      FDayColor: TColor;
    FNightColor: TColor;
    FFont: TFont;
    FOnChange: TOnChange;
      FDatum: TDate;
      FAnzTimes   : Integer;
    FHeaderHeigth : Longint;

      FPHeader   : TPanel;
      FTimeResult: TTimeResult;
      FTimeWidth    : Integer;
      FPaintda      : Boolean;
      FStartDay: TTime;
    FEndDay: TTime;
      FAktTime: TTime;
      FPaint   : TPaintBox;

      FS1,FS2   : TScrollBar;
    FHeaderColor: TColor;
    FJahr: Word;
    FUserWidth: Integer;
      FUsers: Tonl_kalusers;

      FZeitList   : TZeitList;

      FAnzTimeRec   : Longint;

      FDblBuffer   : graphics.TBitmap;
    FOnGetFeierTag: TOnGetFeierTag;
      FFeiertagFont: TFont;

      FXMark,FYMark   : Longint;
    FOnChangeTag: TOnChangeTag;
    FAktDayColor: TColor;
    FZK: TZk;
    FZKEffect: TzkEffekt;
      FTermine: Tonl_kaltermine;
      FCreateTermin: Boolean;
      FNewtermin: Tonl_kaltermin;

      procedure WMSize(var Message: TWMSize); message WM_SIZE;
      procedure WMPaint(var AMessage : TWMPaint); message wm_Paint;

    procedure SetDayColor(const Value: TColor);
    procedure SetFont(const Value: TFont);
    procedure SetHGColor(const Value: TColor);
    procedure SetNightColor(const Value: TColor);
    procedure SetOnChange(const Value: TOnChange);
      procedure SetDatum(const Value: TDate);

      Procedure SetAnzTimes;
    procedure SetTimeResult(const Value: TTimeResult);
    procedure SetEndDay(const Value: TTime);
    procedure SetStartDay(const Value: TTime);
      procedure SetAktTime(const Value: TTime);
      procedure SetOnGetFeierTag(const Value: TOnGetFeierTag);
      procedure SetFeiertagFont(const Value: TFont);

      Procedure CreateHeaders(C : TCanvas);
      Procedure CreateUsers(C : TCanvas);
      Procedure CreateView;

      procedure SetHeaderColor(const Value: TColor);
      function LinearBlendedColor(Color1, Color2: TColor; alpha: Integer): TColor;
    procedure SetUserWidth(const Value: Integer);
      procedure SetUsers(const Value: Tonl_kalusers);
      Procedure ZeichneKasten(x,y,w,h : Longint;C : TCanvas;Farbe : TColor;Style : TZk;effekt : TzkEffekt;Farbe1 : TColor=0);

      Procedure ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;var ScrollPos: Integer);
      procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,   Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);

    procedure SetOnChangeTag(const Value: TOnChangeTag);
    procedure SetAktDayColor(const Value: TColor);
    procedure SetZK(const Value: TZk);
    procedure SetZKEffect(const Value: TzkEffekt);
    procedure SetTermine(const Value: Tonl_kaltermine);

      { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
   public
      { Public-Deklarationen }
      Constructor Create(AOwner: TComponent); override;
      Destructor Destroy; override;

   published
      { Published-Deklarationen }
      property Align;

      Property HGColor      : TColor read FHGColor write SetHGColor;
      Property DayColor      : TColor read FDayColor write SetDayColor;
      Property NightColor   : TColor read FNightColor write SetNightColor;
      Property HeaderColor: TColor read FHeaderColor write SetHeaderColor;
      Property AktDayColor: TColor read FAktDayColor write SetAktDayColor;
      Property Font            : TFont read FFont write SetFont;
      Property FeiertagFont   : TFont read FFeiertagFont write SetFeiertagFont;
      Property Datum         : TDate read FDatum write SetDatum;
      Property TimeResult   : TTimeResult read FTimeResult write SetTimeResult;
      Property StartDay      : TTime read FStartDay write SetStartDay;
      Property EndDay         : TTime read FEndDay write SetEndDay;
      Property AktTime      : TTime read FAktTime write SetAktTime;
      Property Jahr            : Word read FJahr;
      Property UserWidth   : Integer read FUserWidth write SetUserWidth;
      Property ZK               : TZk read FZK write SetZK;
      Property ZKEffect      : TzkEffekt read FZKEffect write SetZKEffect;

      Property Users         : Tonl_kalusers read FUsers write SetUsers;
      Property Termine      : Tonl_kaltermine read FTermine write SetTermine;

      Property OnChange          : TOnChange read FOnChange write SetOnChange;
      Property OnGetFeierTag   : TOnGetFeierTag read FOnGetFeierTag write SetOnGetFeierTag;
      Property OnChangeTag      : TOnChangeTag read FOnChangeTag write SetOnChangeTag;

   end;


procedure Tonl_kalender.FormMouseDown(Sender: TObject;
   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var
   xp,yp      : Longint;
begin
   xp:=(x-FUserWidth) DIV TimeWidth;
   yp:=(y-FHeaderHeigth) DIV TimeHeight;
   If (xp>=0) and (yp>=0) then
   Begin
      FCreateTermin:=True;
      FNewtermin:=Tonl_kaltermin.Create(Self);
      FNewtermin.Parent:=Self;
      FNewtermin.Color:=clBlack;
      FNewtermin.Left:=x;
      FNewtermin.Top:=y;
   End;
end;

constructor Tonl_kalender.Create(AOwner: TComponent);
begin
   inherited;
   FCreateTermin:=False;
   FZeitList:=TZeitList.Create;
   FPaintda:=False;
   FHGColor:=clBtnFace;
   FDayColor:=clCream;
   FNightColor:=clSkyBlue;
   FHeaderColor:=clBlue;
   FFont:=TFont.Create;
   FFont.Name:='Arial';
   FFont.Size:=10;
   FFont.Color:=clBlack;
   FFeiertagFont:=TFont.Create;
   FFeiertagFont.Name:='Arial';
   FFeiertagFont.Size:=10;
   FFeiertagFont.Color:=clRed;
  FAktDayColor:=clLime;
   FPHeader:=TPanel.Create(Self);
   FStartDay:=StrToTime('08:00');
   FEndDay:=StrToTime('18:00');
   FUserWidth:=60;
   FDatum:=Date;
   FAktTime:=Now;
   FJahr:=StrToInt(FormatDateTime('yyyy',FDatum));

   FAnzTimes:=0;
   FTimeWidth:=0;
   FTimeResult:=onltk_15min;

   With FPHeader do
   Begin
      Name:='p_header';
    Caption:='';
      Parent:=Self;<= Warum geht das hier
      Left:=0;
      Top:=0;
      Height:=20;
      Width:=Self.Width;
      Align:=alTop;
    Visible:=False;
   End;

   FS1:=TScrollBar.Create(Self);
   With FS1 do
   Begin
      Parent:=Self;
      Align:=alBottom;
      Visible:=False;
      Kind:=sbHorizontal;
    OnScroll:=ScrollBar1Scroll;
   End;

   FS2:=TScrollBar.Create(Self);
   With FS2 do
   Begin
      Parent:=Self;
      Align:=alRight;
      Visible:=False;
    Kind:=sbVertical;
   End;

   FPaint:=TPaintBox.Create(Self);
   With FPaint do
   Begin
    Parent:=Self;
      Align:=alClient;
      OnMouseMove:=FormMouseMove;
      OnMouseDown:=FormMouseDown;
    OnMouseUp:=FormMouseUp;
   End;

   FDblBuffer:=graphics.TBitmap.Create;

   FUsers:=Tonl_kalusers.Create;

    SetAnzTimes;
end;
Hier ist mehr
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 14:51
Wie gesagt eine Komponente kann nicht ihr eigener Parent sein!
Genauso wenig wie du dein eigener Vater sein kannst.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 15:06
IMHO ein schönes Beispiel dafür wie man mit WITH..DO sehr ordentliches Chaos verursachen kann.

Zitat von franktron:
Delphi-Quellcode:
With FPHeader do
Begin
  Name:='p_header';
  Caption:='';
  Parent:=Self;<= Warum geht das hier
  Left:=0;
  Top:=0;
  Height:=20;
  Width:=Self.Width;
  Align:=alTop;
  Visible:=False;
End;
Ohne das WITH..DO sähen die ersten paar Zeilen so aus:

Delphi-Quellcode:
FPHeader.Name:='p_header';
FPHeader.Caption:='';
FPHeader.Parent:=FPHeader.Self; //KABOOM durch PICNIC ;)
[...]
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 15:09
Zitat von mkinzler:
Wie gesagt eine Komponente kann nicht ihr eigener Parent sein!
Genauso wenig wie du dein eigener Vater sein kannst.
Komm ich nun ducheinander ??

Also mein denken.

Ich habe ein Kombo z.b. TMutter in der Erstelle ich TKind dann muss der Parent von TKind doch TMutter sein und nicht TGrossmutter oder ??
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 15:10
Zitat von OldGrumpy:
IMHO ein schönes Beispiel dafür wie man mit WITH..DO sehr ordentliches Chaos verursachen kann.

Zitat von franktron:
Delphi-Quellcode:
With FPHeader do
Begin
  Name:='p_header';
  Caption:='';
  Parent:=Self;<= Warum geht das hier
  Left:=0;
  Top:=0;
  Height:=20;
  Width:=Self.Width;
  Align:=alTop;
  Visible:=False;
End;
Ohne das WITH..DO sähen die ersten paar Zeilen so aus:

Delphi-Quellcode:
FPHeader.Name:='p_header';
FPHeader.Caption:='';
FPHeader.Parent:=FPHeader.Self; //KABOOM durch PICNIC ;)
[...]
An der Stelle geht es ja. FPHeader.Self gibt es nicht. Und Self ist auch nicht FPHeader ...
Chris
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#10

Re: Zugriffsverletzung bei zuweisung von Self

  Alt 5. Nov 2007, 15:14
Die stelle geht doch das ist ja gerade das lustige.

Aber wenn ich

Delphi-Quellcode:
FNewtermin:=Tonl_kaltermin.Create(Self);
      FNewtermin.Parent:=Self;
Mach dann knalltes
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:56 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