AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Element '' hat kein übergeordnetes Fenster"

Ein Thema von xZise · begonnen am 12. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

"Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 16:42
Ich Bau meine Memo um und schreibe eine Komponente mit einer ListBox.
Problem ist nur, wenn ich dessen repräsetant (die Property) setze, und as "StringList"-Editor-Fenster schliesse, dann kommt die Meldung, dass Element '' kein übergeordnetes Fenster hat.

Ich bin auch ratlos, woran es liegen könnte...
Wenn ihr Code braucht, dann schicke ich ihn nach (bitte nur einzelene Segemente, wie "Destroy-funktion", "Header" o.ä.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#2

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 16:48
Hai, das Fenster müstest du im create als Referenz mit geben, und dann setzen! dann sollte es gehn...
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 16:54
Du meinst:

constructor Create(AOwner : TComponent) ???
Ist schon so... Die Listbox hat auch dessen Owner...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#4

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 17:01
Gib mal einen codeschnipsel vielleicht fällt mir auf
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#5

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 17:06
Die Create Methode:
Delphi-Quellcode:
constructor TCompletionMemo.Create(AOwner: TComponent);
begin
   inherited;
  completionBox := TListBox.Create(self);
  completionBox.Parent := AOwner as TWinControl;
  completionBox.Width := FCompletionSizeWidth;
  completionBox.Height := FCompletionSizeHeight;
  FCompletionList := TStringList.Create;
end;
Und ggf. wichtig:
Die Property der ListBox:
Delphi-Quellcode:
  published
    property CompletionList : TStringList read FCompletionList write FCompletionList;
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 17:09
bitte ersma Parent zuweisen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#7

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 17:14
Die Strings von der ListBox werden wie die von der ComboBox vom BS verwaltet. Und das BS kann das erst, wenn die ListBox ein Handle hat. Du kannst mal schaun, ob 'completionBox.HandleNeeded' was hilft. Nen parent zuweisen hilft nicht. Der könnte ja auch noch 'unsichtbar' sein und kein Handle haben.
[edit]: das HandleNeeded nachdem Zuweisen eines Parent schreiben, weil ohne den ist das BS hilflos in Sachen Handle kreieren.
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#8

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 17:39
Hmm??? Sidorion hat da leiderrecht...
wenn´s möglich ist das TStringList.Create vieleicht zu einem späteren Zeitpunkt ausführen??
also im onShow oder so...
Jörg
have FUN
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#9

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 12. Feb 2007, 18:13
Zitat von DGL-luke:
bitte ersma Parent zuweisen.
Wovon? Wenn du das Memofeld meinst => inherited, wenn du die ListBox meinst => Create von dem Memofeld:
completionBox.Parent := AOwner as TWinControl;
Zitat von yörsch:
Hmm??? Sidorion hat da leiderrecht...
wenn´s möglich ist das TStringList.Create vieleicht zu einem späteren Zeitpunkt ausführen??
also im onShow oder so...
Ich verstehe nicht, warum das so wichtig ist, weil die StringList nicht an der ListBox hängt. Nur wenn sie angezeigt wird (was sie nicht wird), wird die gebraucht.

xZise hat folgendes hinzugefügt:
Das funktioniert nicht:
Zitat:
---------------------------
Fehler
---------------------------
nil kann nicht zu TRichEditStrings zugewiesen werden.
---------------------------
OK Details >>
---------------------------




Zitat von Sidorion:
Die Strings von der ListBox werden wie die von der ComboBox vom BS verwaltet. Und das BS kann das erst, wenn die ListBox ein Handle hat. Du kannst mal schaun, ob 'completionBox.HandleNeeded' was hilft. Nen parent zuweisen hilft nicht. Der könnte ja auch noch 'unsichtbar' sein und kein Handle haben.
[edit]: das HandleNeeded nachdem Zuweisen eines Parent schreiben, weil ohne den ist das BS hilflos in Sachen Handle kreieren.
Ich werde mal gucken...

PS: Ich bin noch in der IDE ... Nur damit ihr das nicht durcheinander bringt!

xZise hat folgendes hinzugefügt:
Das tut es auch nicht :/ Ich habe kein Plan, warum das nicht funktioniert...

Vielleichts hilft es ja:
Delphi-Quellcode:
  TKeyPress = procedure (Sender: TObject; var Key: Char) of object;
  TKeyDown = procedure (Sender: TObject; var Key: Word; Shift: TShiftState) of object;
  TSize = array [0..1] of Integer;

  TCompletionMemo = class(TMemo)
  private
    FCompletionList : TStrings;
    completionBox : TListBox;

    FMoveableCaret: Boolean;
    preSelect : string;

    caretPosition : Integer;
    FCompletionSizeWidth: Integer;
    FCompletionSizeHeight: Integer;

    procedure repositionating;
    procedure SetCompletionSizeHeight(const Value: Integer);
    procedure SetCompletionSizeWidth(const Value: Integer);
  protected
    procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    procedure KeyPress(var Key: Char); override;
  public
    constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;
  published
    property CompletionList : TStrings read FCompletionList write FCompletionList;
    property CompletionSizeWidth : Integer read FCompletionSizeWidth write SetCompletionSizeWidth default 80;
    property CompletionSizeHeight : Integer read FCompletionSizeHeight write SetCompletionSizeHeight default 40;
    property MoveableCaret : Boolean read FMoveableCaret write FMoveableCaret;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TCompletionMemo]);
end;

{ TCompletionMemo }

constructor TCompletionMemo.Create(AOwner: TComponent);
begin
   inherited;
  completionBox := TListBox.Create(self);
  completionBox.Parent := AOwner as TWinControl;
  completionBox.Width := FCompletionSizeWidth;
  completionBox.Height := FCompletionSizeHeight;
  completionBox.HandleNeeded;
  FCompletionList := TStringList.Create;
end;

destructor TCompletionMemo.Destroy;
begin
  FreeAndNil(completionBox);
  FreeAndNil(FCompletionList);
  inherited;
end;

procedure TCompletionMemo.KeyDown(var Key: Word;
  Shift: TShiftState);
begin
  {...}
  inherited;
end;

procedure TCompletionMemo.KeyPress(var Key: Char);
var
   i : Integer;
begin
  {...}
  inherited;
end;

procedure TCompletionMemo.repositionating;
var
   CaretPos : TPoint;
begin
  CaretPos := GetCaretPos;
  CaretPos := ClientToParent(CaretPos);

  with completionBox do
  begin
    Left := CaretPos.X + 3;
    Top := CaretPos.Y - Font.Height + 3;
  end;
end;

procedure TCompletionMemo.SetCompletionSizeHeight(const Value: Integer);
begin
  FCompletionSizeHeight := Value;
  completionBox.Height := Value;
end;

procedure TCompletionMemo.SetCompletionSizeWidth(const Value: Integer);
begin
  FCompletionSizeWidth := Value;
   completionBox.Width := Value;
end;

end.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: "Element '' hat kein übergeordnetes Fenster"

  Alt 14. Feb 2007, 15:16
Die Frage ist leider immernoch nicht beantwortet
Wäre nett, wenn mich mal jemand aufklären könnte... Immerhin gibt es ja auch andere Controls, welche TStrings als Property verwenden...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 20:08 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