Ich habe ein einfachen Texteditor gebaut,
der dynm. in einem PageControl TabSheets und Editoren anlegt.
(zur Laufzeit)
Dafür habe ich ein Array von einem Record verwendet,
das Programm funktioniert solange gut,
wie ich nicht versuche auf dieses Array zuzugreifen.
Daraufhin viel mir auf, das es leer war.
Meine Frage … Wo sind die Komponenten (wo werden Sie verwaltet),
und wie kann ich drauf zugreifen.
Bitte mal anschauen:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, SynEdit, ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
MainMenu1: TMainMenu;
Datei1: TMenuItem;
ffnen1: TMenuItem;
schlieen1: TMenuItem;
beenden1: TMenuItem;
OpenDialog1: TOpenDialog;
test1: TMenuItem;
HalloWelt1: TMenuItem;
procedure ffnen1Click(Sender: TObject);
procedure schlieen1Click(Sender: TObject);
procedure HalloWelt1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R \*.dfm}
type TEditorfenster = record
nr: integer;
dateiname: string;
changed: boolean;
Editor: TSynEdit;
tabsheet: TTabsheet;
end;
var Editorfenster: array [1..100] of TEditorfenster;
Editorfenster\_count: integer = 0;
procedure neues\_fenster(editfenster: TEditorfenster);
begin
inc( Editorfenster\_count );
with editfenster do
begin
tabsheet := TTabSheet.Create(Form1.PageControl1);
tabsheet.PageControl := Form1.PageControl1;
tabsheet.caption := form1.opendialog1.filename;
nr := Editorfenster\_count;
dateiname := form1.opendialog1.filename;
changed := false;
Editor := TSynEdit.Create( nil );
Editor.Parent := tabsheet;
editor.align := alClient;
editor.lines.LoadFromFile( form1.opendialog1.filename );
editor.Show;
end;
end;
procedure TForm1.ffnen1Click(Sender: TObject);
begin
if not opendialog1.execute then exit;
neues\_fenster(Editorfenster[Editorfenster\_count]);
end;
procedure TForm1.schlieen1Click(Sender: TObject);
var current\_page: TTabSheet;
i: integer;
begin
pagecontrol1.ActivePage.destroy;
end;
procedure TForm1.HalloWelt1Click(Sender: TObject);
begin
// Hier entsteht der Fehler
Editorfenster[1].Editor.lines.add('Hallo Welt');
end;
end.#