![]() |
Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Die Komponente wird ohne Probleme erstellt; die Ereignisse onChange und onKeyPress werden fehlerfrei ausgeführt.
Sobald ich onKeyUp oder onKeyDown benutze erhalte ich eine Exception (Zugriffsverletzung): ...bei Adresse 0018FC8F. Schreiben von Adresse... Warum?
Delphi-Quellcode:
so wirds aufgerufen
unit prozeduren;
interface uses Mapi, SysUtils, Classes, IniFiles, AdvCombo, Graphics, StdCtrls, Controls, Dialogs; procedure combobox_erstellen(Top, Left : Integer; Besitzer : TComponent; Vater : TWinControl); procedure combobox_change(Sender : TObject); procedure combobox_KeyPress(Sender : TObject; var Key: Char); procedure combobox_KeyUp(Sender : TObject; var Key: Word; Shift: TShiftState); Var CB : TAdvComboBox; implementation uses fo_haupt; procedure combobox_erstellen(Top, Left : Integer; Besitzer : TComponent; Vater : TWinControl); Var MyButton : TButton; begin CB := TAdvComboBox.Create(Besitzer); CB.Parent := Vater; CB.Top := Top; CB.Left := Left; CB.Text := 'Personen-Suche'; CB.Font.Color := clGrayText; CB.AutoComplete := false; CB.Name := 'combo_Suche2'; @CB.OnChange := @combobox_change; @CB.OnKeyPress := @combobox_KeyPress; @CB.OnKeyUp := @combobox_KeyUp; // @CB.OnKeyDown := @combobox_KeyUp; end; procedure combobox_change(Sender : TObject); begin if CB.Font.Color <> clBlack then CB.Font.Color := clBlack; end; procedure combobox_KeyPress(Sender : TObject; var Key: Char); begin fm_haupt.label1.caption := CB.Text; end; procedure combobox_KeyUp(Sender : TObject; var Key: Word; Shift: TShiftState); begin fm_haupt.label2.caption := CB.Text; end; end.
Delphi-Quellcode:
procedure Tfm_haupt.Button1Click(Sender: TObject);
begin combobox_erstellen(20, 20, fm_haupt, Panel1); end; |
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Ich denke die Zuweisung von Events solltest du so machen
Delphi-Quellcode:
Wozu die @s?
CB.OnChange := combobox_change;
|
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Also das was du da machst ist äußerst seltsam. Mein Vorschlag wäre, dass du die Prozeduren in dein Formular nimmst.
Delphi-Quellcode:
Tfm_haupt = class(TForm)
... private procedure combobox_erstellen(Top, Left : Integer; Besitzer : TComponent); procedure combobox_change(Sender : TObject); procedure combobox_KeyPress(Sender : TObject; var Key: Char); procedure combobox_KeyUp(Sender : TObject; var Key: Word; Shift: TShiftState); end; var fm_haupt : Tfmhaupt; implementation {$R *.DFM} procedure Tfm_haupt.combobox_erstellen(Top, Left : Integer; Besitzer : TComponent); Var CB : TAdvComboBox; begin CB := TAdvComboBox.Create(Besitzer); CB.Parent := Besitzer; CB.Top := Top; CB.Left := Left; CB.Text := 'Personen-Suche'; CB.Font.Color := clGrayText; CB.AutoComplete := false; CB.Name := 'combo_Suche2'; CB.OnChange := combobox_change; CB.OnKeyPress := combobox_KeyPress; CB.OnKeyUp := combobox_KeyUp; // CB.OnKeyDown := combobox_KeyUp; end; procedure Tfm_haupt.combobox_change(Sender : TObject); begin if TAdvComboBox(Sender).Font.Color <> clBlack then TAdvComboBox(Sender).Font.Color := clBlack; end; procedure Tfm_haupt.combobox_KeyPress(Sender : TObject; var Key: Char); begin label1.caption := TAdvComboBox(Sender).Text; end; procedure Tfm_haupt.combobox_KeyUp(Sender : TObject; var Key: Word; Shift: TShiftState); begin label2.caption := TAdvComboBox(Sender).Text; end; procedure Tfm_haupt.Button1Click(Sender: TObject); begin combobox_erstellen(20, 20, Panel1); end; |
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Hallo,
die Methoden die du zuweißt
Delphi-Quellcode:
können so nicht funktionieren, da hier keine Proceduren mit der Signatur
@<MethodenName>
Delphi-Quellcode:
gefordert sind, sondern
Sender: TObject
Delphi-Quellcode:
(Siehe Deklaration von TNotifyEvent).
procedure(Sender: TObject) of object
Delphi-Quellcode:
ist der Hinweiß, die Methoden müssen einem Objekt gehören - wie es baumina vorschlägt z.B. dem Formular zuordnen.
of object
Die fix kodierte Namenzuweisung dürfte früher oder später auch für Proble sorgen. Ich würde davon auch abraten. Gruß, Chris |
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Darf ich fragen, warum die Prozeduren keine Methoden der Form-Klasse fm_haupt sind?
MfG Dalai |
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Hallo Dalai,
wem gilt die Frage? Gruß, Chris |
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Danke für die fixen Antworten.
Zitat:
|
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Du könntest ein Frame für sowas verwenden und dieses dann zur Laufzeit immer stellen. Auf das Frame packst du vorher die Combo und klickst dir deine Methoden zusammen. Am schluss, muss du nur noch ein Frame erzeugen, platzieren etc. wo du es brauchst. Entweder zur Laufzeit oder Vorher.
Gruß, Chris |
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Zitat:
|
AW: Zugriffsverletzung bei Event bei zur Laufzeit erstellter Komponente
Hmm - klar.
So wie du es von baumina gezeigt bekommen hast. Aber schau dir das mit den Frames ruhig nochmal an, dass ist kein Fehler die zu kennen. Und es ist im Endeffekt nichts anders als mit Formularen zu arbeiten :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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