AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler: Element '' hat kein Übergeordnetes Fenster.
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler: Element '' hat kein Übergeordnetes Fenster.

Ein Thema von Phiennes · begonnen am 22. Mai 2009 · letzter Beitrag vom 22. Mai 2009
Antwort Antwort
Phiennes

Registriert seit: 30. Nov 2008
Ort: Bochum
30 Beiträge
 
#1

Fehler: Element '' hat kein Übergeordnetes Fenster.

  Alt 22. Mai 2009, 08:33
Hi,

Ich möchte mit Hilfe einer eigenen Unit eine art Navigation programmieren. Leider bekomme ich beim Ausführen immer die Fehlermeldung: "Element '' hat kein übergeordnetes Fenster".


Momentan besteht die Navigation lediglich aus einer Reihe von Buttons, die ich selbst vorher programmiert und getestet habe. Die eigene NaviCreate Methode zeigt keine Fehlermeldung an. Erst wenn Paint, bzw NaviPaint ausgeführt wird kommt die Fehlermeldung.


(Ich hoffe der Quelltext ist verständlich und nicht zu unübersichtlich.)
Anwendung
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, bkButton, bknavi;

type
  TForm1 = class(TForm)
    Button1: TButton;
    bknavi1: Tbknavi;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

const
  num=8;


var
  Form1: TForm1;
  Acap: Array[1..num] of String;
  x: Boolean;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
VAR i:byte; c1,c2: TColor;
begin
  for i:=1 to num do
    Acap[i]:='Button '+IntToStr(i); // Die Captions der Buttons

  c1:=RGB(160, 110, 110);
  c2:=RGB(40, 40, 40);
  bknavi1.naviCreate( 0, 0, 800, 80, num, 0, Acap, c1, c2, clWhite, clBlack, 'horizontal');
  //bknavi1.naviCreate(left, top, width, height, anzahl, nichtWichtig, captions, coloreigenschaften der Buttons........., style);

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  bknavi1.FormMove;
end;

end.

Unit
Delphi-Quellcode:
unit bknavi;

interface

uses
  Windows, SysUtils, Variants, Classes, forms, Graphics, Controls, StdCtrls, ExtCtrls, Dialogs, bkButton, bkBorder;

type
  Tbknavi = class(TCustomControl)
  private
    { Private-Deklarationen }
    Anavi: Array of TbkButton;
    Asize: byte;
    BtnBorder: TbkBorder;
  protected
    { Protected-Deklarationen }
    procedure Paint(); Override;
  public
    { Public-Deklarationen }  
    akt: Boolean;
    procedure naviCreate(x1, y1, x2, y2: Integer; size, front: byte; text: Array of String; color, backColor, FontColor, FChover: TColor; Style:String);
    constructor Create(AOwner: TComponent); Override;
    procedure NaviPaint(id: TbkButton; form: Boolean);
    procedure SetOnMouseMove();
    procedure ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMove();
    procedure NaviDestroy();
  published
    { Published-Deklarationen }
    property OnMouseMove;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('bkModule', [Tbknavi]);
end;

constructor Tbknavi.Create(AOwner: TComponent);
VAR i,x,y: Integer; cap: Array[1..5] of String;
begin
  x:=800;
  y:=80;
  inherited Create (AOwner);
  SetBounds(0,0,x,y);

  akt:=false; // Wichtig, damit Paint erst ausgeführt wird, wenn das Array geladen ist

  //for i:=1 to 5 do
    //cap[i]:='Btn'+IntToStr(i);
  //naviCreate( 0, 0, x, y, 5, 1, cap, clBlue, clYellow, clBlack, clWhite, 'horizontal');
end;

procedure Tbknavi.NaviDestroy();
begin
  try
    Anavi := nil;
  EXCEPT
    ShowMessage('Nichts kann nicht zerstört werden :P');
  end;
end;

procedure Tbknavi.naviCreate(x1, y1, x2, y2: Integer; size, front: byte; text: Array of String; color, backColor, FontColor, FChover: TColor; Style:String);
VAR i:byte;
begin
  NaviDestroy;

  left:=x1-1;
  width:= x2+2;
  top:=y1-1;
  height:= y2+2;
  Asize:=size;

  Setlength(Anavi, size+1);
  for i:=1 to size do begin
    Anavi[i]:=TbkButton.Create(self);
                               


    if style='horizontalthen begin
      Anavi[i].Top:=0;
      Anavi[i].Height:=y2;
      Anavi[i].Left:=round(x2/size)*(i-1);
      Anavi[i].Width:=round(x2/size);
    end else
    if style='vertikalthen begin
      Anavi[i].Top:=round((y2/size)*(i-1));
      Anavi[i].Height:=round(y2/size);
      Anavi[i].Left:=0;
      Anavi[i].Width:=x2;
    end else begin
      ShowMessage('Undefinierter Bezeichner "'+style+'"');
      exit;
    end;

    Anavi[i].bkSetButtonMode(color, backColor, FontColor, FCHover, 'bkSimple');
    Anavi[i].BLabel.Caption:=text[i];
    Anavi[i].Tag:=i;

    Anavi[i].ButtonPaint(true, false);


  end;

    {
  BtnBorder:=TbkBorder.Create(self);
  BtnBorder.bkBorderDock(Anavi[1],Anavi[size],'bkDark');
  }


  if front=1 then
    BringToFront
      else
        SendToBack;


  // SetOnMouseMove;

  akt:=true;

end;

procedure Tbknavi.SetOnMouseMove();
// VAR i:Integer;
begin
  // for i:=1 to Asize do
   // Anavi[i].OnMouseMove:= ButtonMouseMove;
end;
procedure Tbknavi.ButtonMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
begin
 // NaviPaint(Sender as TbkButton, false);
end;


procedure TbkNavi.FormMove();
begin
  if akt then ////////////////////
    NaviPaint(Anavi[1], true);

end;


procedure Tbknavi.NaviPaint(id: TbkButton; form: Boolean);
VAR i:byte;
begin
  if akt then begin ////////////////////

    for i:=1 to Asize do begin
      if not(id=Anavi[i])or(form) then
        Anavi[i].ButtonPaint(false, false);
    end;
    if not(form) then
      id.ButtonPaint(true, false);

  end;
       {
  BtnBorder.Design;
    }

end;

procedure Tbknavi.Paint();
begin
  FormMove;
end;

end.
Ich flehe um Hilfe, ich muss irgendwie ein Brett vor dem Kopf haben .
  Mit Zitat antworten Zitat
Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#2

Re: Fehler: Element '' hat kein Übergeordnetes Fenster.

  Alt 22. Mai 2009, 08:55
Hallo!

Ist schon eine Weile her, dass ichDelphi programmiert habe, aber versuch doch mal, den Parent deiner Komponenten explizit zu setzen (Control.Parent := ...). Wenn ich mich richtig erinnere reicht der Owner alleine nicht aus. Kann aber auch sein, dass ich mich irre.

Dust Signs
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat
Phiennes

Registriert seit: 30. Nov 2008
Ort: Bochum
30 Beiträge
 
#3

Re: Fehler: Element '' hat kein Übergeordnetes Fenster.

  Alt 22. Mai 2009, 09:23
du bist der größte danke^^. warum ist das denn so wichtig?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Fehler: Element '' hat kein Übergeordnetes Fenster.

  Alt 22. Mai 2009, 09:25
Weil der Parent für die Anzeige zuständig ist. der Owner sorgt nur für die Freigabe
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:21 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