Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#1

TPopUpMenu-Shortcuts in Frame - Access violation

  Alt 6. Mai 2015, 05:55
Delphi-Version: XE7
Und weil's grad so schön war, hab ich gleich noch ein Problem. Vielleicht leg ich mich ja gleich nach dem Posten wieder schlafen und träume von der Lösung. Doch Spaß beiseite:

Auf einem Frame, der in einem TPanel der Mainform erscheint, habe ich zwei TjvDbRichEdit-Komponenten (JediDbRich), die von einer Firebird-Datenbank versorgt werden. Da gibt es zum einen das Feld PERS_BIO und zum anderen das Feld PERS_ADRES in derselben Tabelle. Beide JediDbRich sind standardmäßig auf ReadOnly gesetzt, damit der Anwender nicht aus Versehen darin rumkritzelt oder unabsichtlich was löscht. Die beiden JediDbRich teilen sich ein TPopUpMenu, das Einträge zur Textgestaltung beinhaltet wie Schriftdialog, Fett, Normal usw. Die Einträge verfügen über Shortcuts, z.B. Strg-F für Fett. Wenn ich nun in den Edit-Modus wechsle, damit ich die Einträge bearbeiten kann – dabei werden die Edit-Felder alle auf ReadOnly := False gesetzt und die Einträge im PopUpMenu Enabled –, danach einen Text im RichEdit markiere und z.B. Strg-K drücke, erhalte ich eine Zugriffsverletzung:

Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x0080e554: read of address 0x00000000'

Wenn ich denselben Menüpunkt mit der Maus auswähle, wird der markierte Text anstandslos kursiv gesetzt. Danach kann ich auch wieder die Shortcuts verwenden, die funktionieren dann – bis zum nächsten Erzeugen des Frames (Frames werden in diesem Programm bei Bedarf immer neu erzeugt und danach wieder freigegeben). Da ich diese Proceduren auch in anderen Frames verwenden möchte, habe ich die eigentliche Funktionalität in die Unit GLD (steht für GlobalData) ausgelagert, z.B.:
Delphi-Quellcode:
// ----- Schriftart im übergebenen TjvDbRichEdit auf fett einstellen -----
Procedure Schrift_Fett(TED : TjvDBRichEdit);
Begin
  If TED.SelLength = 0 THEN Exit;
  TED.SelAttributes.Style := [fsBold];
End;
Aufgerufen wird das dann vom Frame aus so (weil ich ja zwei TvjDbRichEdit im Frame habe):
Delphi-Quellcode:
// ---------- Schrift fett ---------- Ereignisse
Procedure TFrame_Personen.PuM_FettClick(Sender: TObject);
begin
  GLD.Schrift_Fett(PuM_Personen.PopupComponent as TJvDBRichEdit);
end;
Irgendwas ist da noch nicht initialisiert, aber ich hab im Moment absolut keinen Plan, wo ich suchen könnte
Miniaturansicht angehängter Grafiken
dbrich_browse.jpg   dbrich_edit.jpg  
  Mit Zitat antworten Zitat