Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugruffs fehler in einer zur Laufzeit erstellten komponente (https://www.delphipraxis.net/47005-zugruffs-fehler-einer-zur-laufzeit-erstellten-komponente.html)

kingflo 4. Jun 2005 23:04


Zugruffs fehler in einer zur Laufzeit erstellten komponente
 
:gruebel: Hallo ich habe ein PageControl in der ich immer bei bedarf ein neuen Tabsheet erstelle mit einem TSynEdit drin.

Das mache ich so:

Aufruf:
Delphi-Quellcode:
CreateTab('Leer', 'Dokument');
Funktion sieht so aus:

Delphi-Quellcode:
function THTML.CreateTab(sURL, sCaption: string): TTabSheet;
var
  ts: TTabSheet;
  WB: TSynEdit;
begin
  // Create a new TabSheet
  ts := TTabSheet.Create(PageControl3);
  Result := ts;
  try
    // Assign TTabSheet Properties
    ts.PageControl := PageControl3;
    ts.Parent := PageControl3;
    ts.Caption := sCaption;
    ts.PageIndex := PageControl3.ActivePageIndex + 1;

    // Create a instance
    WB := TSynEdit.Create(ts);

    // put TWebbrowser on TTabSheet
    TControl(WB).Parent := ts;
    // or:  Ts.InsertControl(WB);

    // Properties
    WB.Align := alClient;
    WB.Highlighter:=htmledit.Highlighter;
    WB.Visible := True;

    PageControl3.ActivePage := ts;


  except
    ts.Free;
  end;
end;
So weit so gut...
So jetzt habe ich eine Funktion GetCurrentEdit

So deklariert:
Delphi-Quellcode:
  public
  function GetCurrentEdit: TSynEdit;
Ausehen tut sie So:
Delphi-Quellcode:
function THTML.GetCurrentEdit: TSynEdit;
begin
  Result := nil;
  with PageControl3 do
    if ActivePage.ControlCount > 0 then
    begin
      if ActivePage.Controls[0] is TWebbrowser then
      begin
        Result := (TSynEdit(ActivePage.Controls[0]));
      end else
        Result := HTMLCodeEditor;
    end;
end;
HTMLCodeEditor ist übrigens so deklariert:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    HTMLCodeEditor: TSynEdit;
So in dem OnChanging Event von PageControl3 mache ich dieses

Delphi-Quellcode:
procedure THTML.PageControl3Changing(Sender: TObject;
  var AllowChange: Boolean);
begin
  // Get the Previous (Current) Webbrowser
  with PageControl3 do
    if ActivePage.ControlCount > 0 then
      if ActivePage.Controls[0] is TSynEdit then
        HTMLCodeEditor := GetCurrentEdit;
end;
So und wenn ich jetzt mit dem Aktiven HTMLCodeEditor was machen möchte schmiert mir immer das Programm ab z.B wollte ich einfach nur

HTMLCodeEditor.lines.clear sagen aber es schmiert immer ab.... :-(


Kann mir da bitte jemand helfen?
Wo ist den der riesen Fehler???? Bitte helft mir

Danke Flo

[edit=alcaeus]Fuer Delphi-Code gibts die [.delphi]-Tags, nicht die [.code]-Tags Mfg, alcaeus[/edit]

marabu 5. Jun 2005 07:09

Re: Zugruffs fehler in einer zur Laufzeit erstellten kompone
 
Hallo Flo,

da hast du wohl irgendwann von TWebBrowser auf TSynEdit umgestellt und mittendrin aufgehört - oder?

Delphi-Quellcode:
function THTML.CreateTab(pc: TPageControl, sURL, sCaption: string): TTabSheet;
var
  se: TSynEdit;
begin
  // Create a new TabSheet
  Result := TTabSheet.Create(self);
  try
    // Assign TTabSheet Properties
    with Result do begin
      PageControl := pc;
      Parent := pc;
      Caption := sCaption;
      PageIndex := Succ(pc.ActivePageIndex);
    end;

    // Create an instance
    se := TSynEdit.Create(ts);
    with se do begin
      // put TSynEdit on TTabSheet
      Parent := Result;

      // Properties
      Align := alClient;
      Highlighter := htmledit.Highlighter;
      Visible := True;
    end;

    pc.ActivePage := Result;
  except
    Result.Free;
  end;
end;
Delphi-Quellcode:
function THTML.GetCurrentEdit: TSynEdit;
begin
  Result := nil;
  with PageControl3.ActivePage do
    if ControlCount = 0 then
      Result := nil
    else if Controls[0] is TSynEdit then
      Result := TSynEdit(Controls[0])
    else
      Result := HTMLCodeEditor;
end;
Und hier denke ich interessiert dich der Editor nach erfolgtem Change:
Delphi-Quellcode:
procedure THTML.PageControl3Change(Sender: TObject);
begin
  // Get the Previous (Current) SynEdit
  with PageControl3.ActivePage do
    if ControlCount > 0 then
      if Controls[0] is TSynEdit then
        HTMLCodeEditor := TSynEdit(Controls[0]);
end;
Grüße vom marabu

[edit=alcaeus]Wieder code- durch delphi-Tags ersetzt. Mfg, alcaeus[/edit]

kingflo 5. Jun 2005 10:37

Re: Zugruffs fehler in einer zur Laufzeit erstellten kompone
 
Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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