Delphi-PRAXiS
Seite 1 von 3  1 23      

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 VST und der ungewollte Selektionsrahmen... (https://www.delphipraxis.net/110960-vst-und-der-ungewollte-selektionsrahmen.html)

phreax 27. Mär 2008 11:14


VST und der ungewollte Selektionsrahmen...
 
Hallo Forum,
Ich arbeite gerade mit dem VirtualStringTree, dabei ist mit folgender Bug(?) aufgefallen, wenn ich im OnEdited-Ereigenis des Views eine Messagebox anzeigen lasse, so zeichnet der VST nach dem wegklicken der Box einen Selektionsrahmen, wie kann ich das verhindern, bzw. umgehen? :?

Hier die Unit zum reproduzieren:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Virtualtrees;

type

  TmyData = class
    public
      var Value: String;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    myVST: TVirtualStringTree;
    procedure myVSTGettext(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
    TextType: TVSTTextType; var CellText: WideString);
    procedure myVSTNewText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex;
    NewText: WideString);
    procedure myVSTEdited(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var tmp: TmyData;
begin
  myVST := TVirtualStringTree.Create(Self);
  myVST.Parent := Self;
  myVST.Width := Self.ClientWidth;
  myVST.Height := Self.ClientHeight;
  myVST.OnGetText := myVSTGettext;
  myVST.OnNewText := myVSTNewText;
  myVST.OnEdited := myVSTEdited;
  myVST.TreeOptions.MiscOptions := myVST.TreeOptions.MiscOptions+ [toEditable];
  myVST.TreeOptions.SelectionOptions := myVST.TreeOptions.SelectionOptions + [toMultiSelect];
  myVST.NodeDataSize := SizeOf(TmyData);
  tmp := TmyData.Create;
  tmp.Value := 'test';
  myVST.AddChild(nil, tmp);
  myVST.Anchors := [akLeft,akTop,akRight,akBottom];
end;

procedure TForm1.myVSTEdited(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex);
begin
  ShowMessage('test');
end;

procedure TForm1.myVSTGettext(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
begin
  Celltext := TmyData(Sender.GetNodeData(Node)^).Value
end;

procedure TForm1.myVSTNewText(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; NewText: WideString);
begin
  TmyData(Sender.GetNodeData(Node)^).Value := NewText;
end;

end.
hoffe auf schnelle Hilfe
phreax :thumb:

OG Karotte 27. Mär 2008 11:23

Re: VST und der ungewollte Selektionsrahmen...
 
Zitat:

...so zeichnet der VST nach dem wegklicken der Box einen Selektionsrahmen...
Meinst Du die Darstellung, welcher Knoten den Focus hat ? :gruebel:

phreax 27. Mär 2008 11:29

Re: VST und der ungewollte Selektionsrahmen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nein ich meine den Rahmen mit dem man mehrere Konten selektieren kann, Bild siehe Anhang....

generic 27. Mär 2008 12:34

Re: VST und der ungewollte Selektionsrahmen...
 
da kommt wohl ein mouseup ereignis nicht an.

phreax 27. Mär 2008 12:48

Re: VST und der ungewollte Selektionsrahmen...
 
Und was kann man dagegen tun? ein
Delphi-Quellcode:
procedure TForm1.myVSTEdited(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex);
begin
  ShowMessage('test');
  myVST.Perform(WM_LBUTTONUP, 0, 0);
end;
bringt leider auch keine Abhilfe....

OG Karotte 27. Mär 2008 13:18

Re: VST und der ungewollte Selektionsrahmen...
 
Zitat:

Zitat von generic
da kommt wohl ein mouseup ereignis nicht an.

Das würde doch aber bedeuten, das er (in diesem Fall (Demo)) den einzelnen Knoten mit einem Selektionsrahmen auswählt. Was wiederum bedeuten würde, wenn er den Knoten anklickt und dann editiert, dürfte es den Rahmen gem. Bild nicht geben (oder zumindest nicht an der Stelle) :gruebel:

@phreax: Ist das denn der gesamte Code, oder steckt da vielleicht noch mehr hinter...

Hier habe ich diese Probleme definitiv nicht.

phreax 27. Mär 2008 14:43

Re: VST und der ungewollte Selektionsrahmen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist natürlich nicht der gesamte Code, aber ich habe das ganze so weit reduziert, um den Fehler sauber einzugrenzen und der Fehler tritt bei mir bereits in diesem kleinen Demoprojekt auf.
Im Anhang mal das ganze Demoprojekt mit Echse, diese einfach mal ausführen, da tritt der Fehler bestimmt auf...

schon mal Danke für alle Antworten bisher :)
Grüße phreax

OG Karotte 27. Mär 2008 19:30

Re: VST und der ungewollte Selektionsrahmen...
 
OK, bei der von Dir compilierten Version tritt der Fehler tatsächlich auf. Wenn ich jedoch Deinen Source (nur die Unit1 in ein neu erstelltes Projekt kopiert) selbst kompiliere, dann tritt der Fehler nicht auf. Vielleicht liegt es ja an einer der Projektdateien :gruebel:.

Panthrax 27. Mär 2008 20:15

Re: VST und der ungewollte Selektionsrahmen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ebenfalls: Die bei dir kompilierte Datei Project1.exe zeigt den beschriebenen Effekt, die bei mir kompilierte Datei (siehe Anhang) nicht. Ich habe dein Archiv ausgepackt und und das Projekt kompiliert. - Borland Delphi für Microsoft Windows Version 10.0.2288.42451 Update 2 ("TurboDelphi") und VirtualStringTree-Version 4.5.2

phreax 28. Mär 2008 12:26

Re: VST und der ungewollte Selektionsrahmen...
 
Hab gerade nochmal den VirtualtTreeView neu installiert, und einfach meine Unit hier aus dem Thread in ein neues Projekt gepackt, und ausprobiert, immer noch der gleiche Fehler :(
Compiliert mit: Borland® "Turbo" Delphi® für Microsoft® Windows™ Version 10.0.2288.42451 Update 2
VST-Version ist: 4.5.2

@Panthreax bei der von Dir angehängten Echse tritt der Fehler bei mir AUCH auf...
Ausgeführt auf WinXP Home Sp2 Build 2600

Wiso tritt den dieser Bug nur bei mir auf??.... :drunken:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.
Seite 1 von 3  1 23      

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