11. september 2003 - 23:10Der er
13 kommentarer og 1 løsning
Fejl: "SyntaxEdit1 has no parent window."
Jeg har lavet et komponent der nedarver fra TRichedit, og som jeg har lavet en masse ændringer på. Når jeg så compiler osv og prøver at placere mit komponent på en form får jeg fejlen "SyntaxEdit1 has no parent window.", og mit komponent kommer ikke på formen.
Jeg overrider følgende methods: procedure Loaded; procedure Change; procedure Invalidate; constructor Create(AOwner: TComponent); I alle af dem kalder jeg Inherited. Det er dog værd at bemærke at Invalidate ser sådan ud:
procedure TSyntaxEdit.Invalidate; begin if AllowUpdate then Inherited; end;
Hvor AllowUpdate er en boolean property der sættes til True i Create metoden.
Nogen der ved hvad der kan være i vejen siden at jeg får den fejl??
Jeg satte Parent := (AOwner AS TWinControl); ind lige efter inherited som du foreslog, hvilket fik Delphi til at crashe istedet for at komme med en fejl. Jeg nåede at se den dukke op på min Form oppe i venste hjørne, hvorefter Delphi gik i stå og jeg måtte ALT+CTRL+DEL mig ud af det :| Jeg prøver lige det andet eksempel.
constructor TSyntaxEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); end;
procedure TSyntaxEdit.Change; begin inherited; SyntaxCheckAll; end;
procedure TSyntaxEdit.Invalidate; begin if AllowUpdate then Inherited; end;
procedure TSyntaxEdit.LoadSyntaxFile(const Filename: string); // Jeg springer lige et par lokale methods over her var I: Integer; SyntaxList: TStringlist; CurrSyntax: TSyntax; SyntaxCreated: Boolean; Line: String; begin if (SyntaxFilename <> '') and (FileExists(SyntaxFilename)) then begin SetLength(FSyntaces, 0); SyntaxList := TStringlist.Create; SyntaxList.LoadFromFile(SyntaxFilename); I := 0; SyntaxCreated := False;
// Do with every line in the file while I < SyntaxList.Count do begin Line := SyntaxList.Strings[I]; // if not comment if Line[1] <> ';' then begin // if new syntax if Line[1] = '@' then begin if SyntaxCreated then AddSyntax(CurrSyntax); CurrSyntax := NewSyntax; CurrSyntax.SynColor := StringToColor(SubStr(Line, 2, Length(Line))); SyntaxCreated := True; end else // Syntax word CurrSyntax.SynWords.Add(Line); end; end;
if SyntaxCreated then AddSyntax(CurrSyntax); SyntaxList.Free; end; end;
procedure TSyntaxEdit.Loaded; begin Inherited Loaded; LoadSyntaxFile(SyntaxFilename); end;
Fejlen kommer så snart jeg prøver at sætte komponenten på formen! Jeg kan ikke engang starte programmet med den på. Hvis jeg trykker på SyntaxEdit og prøver at sætte den på min form i Delphi, kommer fejlen, og komponenten kommer ikke på min form Jeg kan altså ikke engang komme til at bruge debuggeren.
Jeg fandt fejlen, ved at udkommentere Loaded og Change hvorefter det virkede. Fejlen gemte sig i Change Den kørte åbenbart Change inden Loaded, så jeg måtte bare sørge for at den ikke kørte SyntaxCheckAll fra Change medmindre den var initialized. Tak fordi du prøvede at hjælpe mig tolderlund, men jeg kan desværre ikke give dig point da du ikke besvarede mit spørgsmål.
Øv, jeg synes ellers jeg hjalp dig rigtig godt med at finde fejlen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.