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
 
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, 17: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
 


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 14:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz