Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualTreeView von DelphiGems: C0000005 Exception (https://www.delphipraxis.net/118442-virtualtreeview-von-delphigems-c0000005-exception.html)

Gremlin 7. Aug 2008 22:18


VirtualTreeView von DelphiGems: C0000005 Exception
 
Guten Abend,

ich wollte schon immer mal einen editierbaren Tree basteln und habe mir deshalb das Advanced-Demo von VirtualTreeView
angeschaut. Nach dem Compilieren mit D7 und Auswahl der 3. Seite (PropertiesDemo) wird immer eine C0000005-Exception
ausgelöst, wenn die <Enter>- bzw. <Return>-Taste zur Bestätigung der Eingabe eines TEdits verwendet wird.

Könnte das bitte jemand nachvollziehen, ob das bei ihm auch so ist, damit ich den Fehler einkreisen kann
oder vielleicht hat jemand schon eine Lösung für dieses Problem gefunden?


Danke schon mal

Gruss
Gremlin

Gremlin 8. Aug 2008 20:34

Re: VirtualTreeView von DelphiGems: C0000005 Exception
 
Hallo,


ich habe die Lösung im Supportforum von Softgems gefunden

Das Problem mit der Exception ist, das zuviel zu früh freigegeben wird. Die Lösung ist im Keydown des TEdits eine Nachricht an das Hauptformular des Trees zu schicken und dort die Methode EndEditNode des Trees aufgerufen wird...

Teilcode aus dem Forum (für den Editor):

Delphi-Quellcode:
procedure TPropertyEditLink.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  CanAdvance: Boolean;
  RootForm : TWinControl; //new
begin
...
    VK_RETURN:
      if CanAdvance then
      begin
        // new - begin
        RootForm := FTree;
        if Assigned(RootForm) then
        begin
          while (RootForm.Parent <> nil) do
            RootForm := RootForm.Parent;
          PostMessage(RootForm.Handle, WM_ENDEDITING, 0, 0);
        end;
        // new - end
        Key := 0;
      end;
...
end;

... und der Code für die Form mit dem Tree:

Delphi-Quellcode:
procedure TMyForm.WMEndEditing(var Message: TMessage);
var
  tree: TVirtualStringTree;
begin
  tree := GetCurrentTree; //needed by me, 'cause there are two VTVs on the form
  if Assigned(tree) then
    tree.EndEditNode;
end;

Gruss
Gremlin

generic 8. Aug 2008 23:28

Re: VirtualTreeView von DelphiGems: C0000005 Exception
 
Warum übergibst du den Tree nicht in der Message?

Gremlin 10. Aug 2008 22:13

Re: VirtualTreeView von DelphiGems: C0000005 Exception
 
Kann man natürlich machen, jedoch war ich erst mal froh, überhaupt eine Lösung für das Problem gehabt zu haben und da die Zeit momentan sehr knapp bemessen ist, habe ich den Zeitpunkt der Optimierung ein Stück nach hinten verschoben :) Danke für den Hinweis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz