Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zugriffsverletzung im Editor


Apo95 - So 03.02.13 22:40
Titel: Zugriffsverletzung im Editor
Tagchen,

ich habe Probleme mit einem Editor, an dem ich schreibe. Das Problem ist, das das Programm zur Laufzeit abbricht und eine Fehlermeldung auswirft:

'Im Projekt LCEDX86.exe ist eine Exception der Klasse EReadError aufgetreten mit der Meldung: Ungültiger Eigenschaftswert...'.

Kann mir jemand sagen, woran das liegt?

Hier ist der Code:

Unit1

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
unit Unit1;

interface

uses
  ShellApi, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Neu1: TMenuItem;
    extdokument1: TMenuItem;
    N1: TMenuItem;
    Sichern1: TMenuItem;
    Sichernunter1: TMenuItem;
    N2: TMenuItem;
    Schlieen1: TMenuItem;
    bearbeiten1: TMenuItem;
    WiderrufenEingabe1: TMenuItem;
    WiderholenEingabe1: TMenuItem;
    Einfgen1: TMenuItem;
    Lshcen1: TMenuItem;
    Kopieren1: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    About1: TMenuItem;
    Fehlerberichtsenden1: TMenuItem;
    N6: TMenuItem;
    emailsenden1: TMenuItem;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    FontDialog1: TFontDialog;
    Einlesen1: TMenuItem;
    StatusBar1: TStatusBar;
    DRucken1: TMenuItem;
    EinrichtenDokument1: TMenuItem;
    N7: TMenuItem;
    PrintDialog1: TPrintDialog;
    PrinterSetupDialog1: TPrinterSetupDialog;
    RichEdit1: TRichEdit;
    Programm1: TMenuItem;
    Einstellungen1: TMenuItem;
    procedure Sichern1Click(Sender: TObject);
    procedure Sichernunter1Click(Sender: TObject);
    procedure Schlieen1Click(Sender: TObject);
    procedure extdokument1Click(Sender: TObject);
    procedure Einlesen1Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure emailsenden1Click(Sender: TObject);
    procedure Fehlerberichtsenden1Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure WiderholenEingabe1Click(Sender: TObject);
    procedure WiderrufenEingabe1Click(Sender: TObject);
    procedure Lshcen1Click(Sender: TObject);
    procedure Kopieren1Click(Sender: TObject);
    procedure Einfgen1Click(Sender: TObject);
    procedure DRucken1Click(Sender: TObject);
    procedure EinrichtenDokument1Click(Sender: TObject);
    procedure Einstellungen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  FSize : Integer;
implementation

uses Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Sichern1Click(Sender: TObject);
begin
        if SaveDialog1.Execute then
        begin
        RichEdit1.lines.SaveToFile(SaveDialog1.FileName);
        end else
        Application.MessageBox('Die Datei konnte nicht erstellt werden.','Sicherungsfehler', mb_ICONSTOP or mb_OK);
end;

procedure TForm1.Sichernunter1Click(Sender: TObject);
begin
                if SaveDialog1.Execute then
        begin
        RichEdit1.lines.SaveToFile(SaveDialog1.FileName);
        end else
        Application.MessageBox('Die Datei konnte nicht erstellt werden.','Sicherungsfehler', mb_ICONSTOP or mb_OK);
end;

procedure TForm1.Schlieen1Click(Sender: TObject);
begin
        if Application.MessageBox('Möchten Sie LUCEd 1. Textverarbeitung wirklich beenden?''Programmende', mb_ICONQUESTION or mb_YESNOCANCEL)=IDYES then
        close;
end;

procedure TForm1.extdokument1Click(Sender: TObject);
begin
    if RichEdit1.modified =true then
    begin
    if    Application.MessageBox('Möchten Sie wirklich ein neues Dokument erzeugen? Mit Klick auf "Ja" werden alle bisherigen Änderungen gelöscht!''Wirklich neues Dokument erstellen?', mb_ICONWARNING or mb_YESNOCANCEL)=IDYES then
        RichEdit1.lines.clear;
end else begin
    RichEdit1.lines.clear;
end;
end;
procedure TForm1.Einlesen1Click(Sender: TObject);
begin
                if OpenDialog1.Execute then
        begin
        RichEdit1.lines.LoadFromFile(OpenDialog1.FileName);
        end else
        Application.MessageBox('Die Datei konnte nicht gelesen werden.','Lesefehler/Ladefehler', mb_ICONSTOP or mb_OK);
end;

procedure TForm1.About1Click(Sender: TObject);
begin
        AboutBox.show;
end;

procedure TForm1.emailsenden1Click(Sender: TObject);
begin
        if Application.MessageBox('LUCEd 1.0 Textverarbeitung versucht nun, ein email-Client auf Ihrem PC zu finden. '
       + 'Falls eines vorhanden ist, wird es mit Klick auf "OK" geöffnent.''Versuche, emnail client zu finden und zu öffnen', mb_ICONINFORMATION or mb_OKCANCEL)=IDOK then
        SHELLEXECUTE (handle,'open','mailto:''','',SW_SHOWNORMAL);
end;

procedure TForm1.Fehlerberichtsenden1Click(Sender: TObject);
begin
        SHELLEXECUTE (handle,'open','mailto:fledermaus-pfeil@web.de?subject=Fehlerbericht LUCEd 1.0 Textverarbeirtung','','',SW_SHOWNORMAL);
end;

procedure TForm1.N3Click(Sender: TObject);
begin
        if FontDialog1.Execute then
        begin
        RichEdit1.Font.Assign(FontDialog1.Font);
end;
end;
procedure TForm1.WiderholenEingabe1Click(Sender: TObject);
begin
        RichEdit1.Perform(EM_UNDO, 00);

end;

procedure TForm1.WiderrufenEingabe1Click(Sender: TObject);
begin
        RichEdit1.Perform(WM_UNDO, 00);
end;

procedure TForm1.Lshcen1Click(Sender: TObject);
begin
        RichEdit1.lines.CleanupInstance;
        RichEdit1.lines.Clear;
end;

procedure TForm1.Kopieren1Click(Sender: TObject);
begin
        RichEdit1.CopyToClipboard;
end;

procedure TForm1.Einfgen1Click(Sender: TObject);
begin
        RichEdit1.pasteFromClipboard;
end;

procedure TForm1.DRucken1Click(Sender: TObject);
begin
        if PrintDialog1.execute then
        begin
        RichEdit1.print('');
end;

end;
procedure TForm1.EinrichtenDokument1Click(Sender: TObject);
begin
        if PrinterSetupDialog1.execute then
        begin
        RichEdit1.lines.IndexOf('');
end;

end;
procedure TForm1.Einstellungen1Click(Sender: TObject);
begin
//        Form3.show;
end;

end.


Unit2:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
unit Unit2;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls;
  (*
const
  RgnPoints : array[1..10] of TPoint =
((X:203;Y:22), (X:157;Y:168), (X:3;Y:168),
(X:128;Y:257), (X:81;Y:402), (X:203;Y:334),
(X:325;Y:422), (X:278;Y:257), (X:402;Y:168),
(X:249;Y:168));
*)

type
  TAboutBox = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Image1: TImage;
    BitBtn1: TBitBtn;
    Label4: TLabel;
    procedure BitBtn1Click(Sender: TObject);
 //   procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  AboutBox: TAboutBox;
  
implementation

{$R *.dfm}

procedure TAboutBox.BitBtn1Click(Sender: TObject);
begin
        AboutBox.Close;
end;
(*
procedure TAboutBox.FormCreate(Sender: TObject);
begin
var
    Rgn : HRGN;
  Rgn := CreatePolygonRgn(RgnPoints, High(RgnPoints), ALTERNATE);
  SetWindowRgn(Handle, Rgn, True);

end;
*)

end.


Unit3


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, Buttons, //AppEvnts, NotifyIconData,
  ColorButton, iniFiles, AppEvnts;
const
  IC_CLICK = WM_APP + 201;
type
  TForm3 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Panel1: TPanel;
    Label1: TLabel;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    TabSheet2: TTabSheet;
    CheckBox3: TCheckBox;
    SpeedButton1: TSpeedButton;
    Panel2: TPanel;
    Panel3: TPanel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Edit2: TEdit;
    ColorButton1: TColorButton;
  //  procedure ApplicationEvents1Minimize(Sender: TObject);
    procedure ColorButton1Click(Sender: TObject);
  private
    { Private-Deklarationen }
//          procedure Systray(var sMsg: TMessage); message IC_CLICK;
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
//   NIM : TNotifyIconData;
   ini: TIniFile;
   implementation

uses Unit1;

{$R *.dfm}

(*
procedure TForm1.Systray(var sMsg: TMessage);
begin
  // Vorgang: Klick auf das Icon neben der Uhr und Anzeige der Anwendung
  inherited;
  if (sMsg.LParam = WM_LBUTTONDOWN) then begin
    Show;
    Shell_NotifyIcon(NIM_DELETE, @NIM);
    Application.Restore; //zeigt die Anwendung wieder an
  end;
end;


procedure TForm3.ApplicationEvents1Minimize(Sender: TObject);
begin
         //Vorgang: Minimieren der Anwendung, Entfernung des Taskleisteneintrags
  //und Hinzufügen des Programmicons neben der Uhr
  Form1.FormStyle:=fsStayOnTop;
  Hide;
  with NIM do begin
    cbSize := SizeOf (nIM);
    Wnd := Handle;
    uID := 0;
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := IC_CLICK;
    hIcon := Application.Icon.Handle;
    szTip := 'LUCEd 1 Textverabeitung';
  end;
  Shell_NotifyIcon(NIM_ADD, @NIM);
*)

//end;

procedure TForm3.ColorButton1Click(Sender: TObject);
begin
        ini :=TIniFile.create('C:\USRREG.lcn');
        try
        ini.writeString('NameSpace','First_LastName',Edit1.text);
        ini.writeString('RegistrationKey','',Edit2.text);
        finally
        ini.free;
        end;
end;

end.



Danke im Voraus!!!


Gausi - Mo 04.02.13 10:48

Hast du zwischendurch mit einer anderen/neueren Delphi-Version kompiliert und bist dann zur alten gewechselt?

Ein ähnliches Problem habe ich aktuell auch bei einer Nebenform - da liegts am IDhttp-Server, der unter XE2 ein paar weitere oder andere Eigenschaften hat. Meine Lösung war, die entsprechende Form auch mit der alten IDE zu öffnen und da die Fehler beim Laden "zu ignorieren".


Apo95 - Do 07.02.13 22:27

Ne, habe ich nicht... Das ist alles in Delphi 6 geschrieben...


WasWeißDennIch - Fr 08.02.13 09:32

Dann steht möglicherweise Müll in Deiner *.dfm. Wenn Du z.B. eine Integer-Property hast wie Left, dann kann es nicht sein, dass dieser aus der *.dfm 3.5 zugewiesen werden soll, das wäre dann ein ungültiger Eigenschaftswert.