Zuweisung ruft SIGSEGV hervor...

Rund um die LCL und andere Komponenten
Antworten
House
Beiträge: 19
Registriert: Fr 24. Okt 2008, 12:54

Zuweisung ruft SIGSEGV hervor...

Beitrag von House »

Irgendwie funzt diese Zuweisung nicht so ganz. Dieser Code gehört zum Einstellungsdialog meines Programmes. Form10 ist das Hauptfenster (mit SynEdit). Wie man im Quelltext sehen kann, soll eine Checkbox darüber entscheiden, ob die Codevervollständigung aktiviert ist, oder nicht. Dies versuche ich über folgenden Code zu erreichen:

Code: Alles auswählen

procedure TForm14.CheckBox3Change(Sender: TObject); 
begin 
if not checkbox3.checked then begin 
Form10.SynAutoComplete1.Editor:=nil; 
end 
else begin 
Form10.SynAutoComplete1.Editor:=Form10.SynEdit1; 
end 
end;

Das Problem: Wenn ich das Häckchen der Checkbox nun rausnehme, wirft mir Lazarus diese "berühmte" SIGSEGV Fehlermeldung aus. Auch wenn ich das Programm außerhalb von Lazarus starte, kommt eine Access Violation mit den Button OK "to kill the program" und dem button ignore.

EugenE
Beiträge: 440
Registriert: So 10. Dez 2006, 14:59
OS, Lazarus, FPC: MacOSX Lion 10.7 (L 0.9.31 FPC 2.7.1)
CPU-Target: 64Bit
Kontaktdaten:

Re: Zuweisung ruft SIGSEGV hervor...

Beitrag von EugenE »

Checkbox nicht Created?
Form10 nicht created?

vllt nen Assigned(Form10) prüfen oder Assigned(Form10.SynAutoComplete1)


Ps: was ist eigentlich SynAutoComplete? was macht das , wozu brauch man das ? online gibts nix dazu -.-, nichmal ne anleitung
vllt könntest du eine machen denke wären viele leute dankbar, nicht nur ich^^

MfG,
Eugen

House
Beiträge: 19
Registriert: Fr 24. Okt 2008, 12:54

Re: Zuweisung ruft SIGSEGV hervor...

Beitrag von House »

Doch. Beides existiert.

Zu der Anleitung für das SynAutoComplete: Es handelt sich um eine Komponente im SynEdit Packet, die auch bei Lazarus vorhanden ist. Fügt man die Komponente auf sein Formular hinzu, gibt es im OI die Option für eine Liste zum einfügen von Strings. Es öffnet sich ein Eingabefenster.
Dort könnte zum Beispiel folgendes stehen:
html
=


=
Das vor dem Gleichzeichen ist das, was mit dem nach dem Gleichzeichen ersetzt wird. Dazu gibt der OI die Tastenkombination Shift+Space vor. Kann aber auch geändert werden. Im OI muss man dann unter der Eigenschaft "Editor" das SynEdit, oder SynMemo hinzufügen. Wenn man nun im SynEdit bzw. SynMemo zum Beispiel "html" eintippt und die Tastenkombination betätigt, müsste er es durch "" ersetzten.

Es kann auch auch
html
=
=
=
=
.
.
.
=
=
=
in dieser Liste stehen.

MfG
House

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Zuweisung ruft SIGSEGV hervor...

Beitrag von theo »

Zu deiner Frage.
Schau dir mal den Sourcecode von TSynAutoComplete kurz an. Dann kommst du selber auf die Lösung.
Stichwort: RemoveEditor.

House
Beiträge: 19
Registriert: Fr 24. Okt 2008, 12:54

Re: Zuweisung ruft SIGSEGV hervor...

Beitrag von House »

Code: Alles auswählen

function TSynCompletion.RemoveEditor(aEditor: TCustomSynEdit): boolean;
var
  i: integer;
  P : PRecordUsedToStoreEachEditorVars;
begin
  i := fEditors.Remove(aEditor);
  result := i <> -1;
  if result then
  begin
    p := fEditStuffs[i];  //shane
    dispose(p);           //shane
//    dispose(fEditstuffs[i]);  //commented out by shane
    fEditstuffs.delete(i);
  end;
end;
Meinst du diesen Abschnitt? Wenn ja, dann hilf mir mal bitte auf die Sprünge. Irgendwie kriege ich das nicht gebacken. :oops:

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Zuweisung ruft SIGSEGV hervor...

Beitrag von theo »

Du sollst es ja nur aufrufen, nicht analysieren. ;-)
Statt:
Form10.SynAutoComplete1.Editor:=nil;
Machst du
Form10.SynAutoComplete1.RemoveEditor(Form10.SynEdit1);

House
Beiträge: 19
Registriert: Fr 24. Okt 2008, 12:54

Re: Zuweisung ruft SIGSEGV hervor...

Beitrag von House »

Vielen lieben Dank. Es geht jetzt.

MfG
House

Antworten