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 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:

Panthrax 28. Mär 2008 12:34

Re: VST und der ungewollte Selektionsrahmen...
 
Ich habe eben noch einmal beide Dateien ausgeführt und bei beiden den Text per einfachem Mausklick auf den Eintrag in 'Hallo' geändert:

* deine Exe-Datei zeigt den Effekt
* meine Exe-Datei zeigt den Effekt nicht

Ausgeführt auf Windows Vista Home Premium.
Verruckt...

phreax 28. Mär 2008 12:43

Re: VST und der ungewollte Selektionsrahmen...
 
Sehr komisch... klickst Du auch immer zum abbrechen des Editierens irgendwo in den VST, dort beginnt dann auch der Rahmen?

Gruß phreax

Panthrax 28. Mär 2008 13:30

Re: VST und der ungewollte Selektionsrahmen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Schau dir mal das kleine Video im Anhang an. Dann weißt du genau, was ich gemacht habe. Und ja, wenn ich abbreche, dann startet der Rahmen an der Stelle, wo ich zum Abbrechen geklickt habe. Im Video sieht man, was passiert, wenn ich nicht abbreche (ich bestätige mit Enter). der Rahmen beginnt dann immer relativ weit rechts in der ersten Pixelreihe vom VST.

phreax 28. Mär 2008 14:14

Re: VST und der ungewollte Selektionsrahmen...
 
Liste der Anhänge anzeigen (Anzahl: 2)
Mir ist gerade aufgefallen, dass es sich bei der im Demoprojekt enthaltenen Echse um eine andere Version handelt, wo ich es provoziert hatte, dass immer ein Rahmen erscheint....
Im Anhang die korrekte Version, der Bug tritt NUR auf, wenn nach dem ändern des Wertes in den View geklickt wird (siehe Screenshot)....

Probiert das doch bitte mal aus

BTW: @Panthrax Danke für die viele Mühe mit dem Video :thumb:

EDIT: nochmals eine genaue Beschreibung zum Auslösen des Fehlers:
1) Programm öffnen, dann den Node anklicken
2) F2 drücken, das editieren beginnt
3) Wie auf dem Bild gezeigt, abseits des Nodes auf den VST klicken...

Gruß phreax

Panthrax 28. Mär 2008 18:37

Re: VST und der ungewollte Selektionsrahmen...
 
Ja, bei der VST-Bug.exe erscheint der Rahmen nur, wenn das Editieren des Knoten-Eintrags mit einem Klick auf den VST beendet wird. Dabei spielt es keine Rolle, ob die Knotenbeschriftung geändert wurde oder nicht.

Trotzdem seltsam. Denn wie oben schon gesagt, ich kann dein Projekt kompilieren, ohne Nebeneffekt im Programm.

Die Videosoftware habe ich dafür extra herausgekramt. Ein Video sagt hier doch auch mehr als taudsend Worte. :zwinker:

phreax 28. Mär 2008 19:22

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

Zitat von Panthrax
Trotzdem seltsam. Denn wie oben schon gesagt, ich kann dein Projekt kompilieren, ohne Nebeneffekt im Programm.

Also Du kannst den Bug nicht reproduzieren, aber wenn ich die von Dir compilierte Echse ausführe bekomme ich trotzdem den selben Bug?
Das würde ja heißen, dass der Bug zum einen Systemabhängig und zum anderen Delphi- oder VST-Versionsabhängig ist...

ich werde verrrückt :drunken:

Panthrax 28. Mär 2008 19:53

Re: VST und der ungewollte Selektionsrahmen...
 
Im Video kannst du ja sehen, dass die bei mir kompilierte Datei nicht den Rahmen als Nebeneffekt hat. Mit anderen Worten:

* Nein, ich kann keine Exe erstellen, die den Nebeneffekt hat.
* Ja, ich habe denselben Nebeneffekt beim Ausführen der von dir gelieferten Exe-Dateien.

Das gilt für Vista Home Premium.

Und, Achtung, jetzt kommt's...:

* Ja, ich habe denselben Nebeneffekt beim Ausführen der von dir gelieferten Exe-Dateien.
* Ja, ich habe denselben Nebeneffekt beim Ausführen der von mir kompilierten Exe-Dateien.

Und das gilt für XP Professional.

Probier' es doch auch einmal auf einem anderen Rechner mit einem anderen Betriebssystem, wenn du das kannst. Der Betriebssystemtyp hat also Einfluss auf den Nebeneffekt. Dass wir mit der gleichen Delphiversion arbeiten haben wir ja schon festgestellt.

phreax 28. Mär 2008 20:06

Re: VST und der ungewollte Selektionsrahmen...
 
Oke Danke für die vielen Tests, das wird ja richtig haarig...

Uuund wenn jetzt noch jemand nen Workaround (an einen Fix wage ich mal garnicht zu denken ;) ) hat, dann gebe ich eine Runde in der DP-Bar aus :lol:

Sonst, muss das unter die "Known and non fixable bugs" ins ReadMe.txt schreiben, und das fänd ich schade :wall:

Grüße phreax

OG Karotte 28. Mär 2008 20:29

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

Zitat von Panthrax
...
Und, Achtung, jetzt kommt's...:

* Ja, ich habe denselben Nebeneffekt beim Ausführen der von dir gelieferten Exe-Dateien.
* Ja, ich habe denselben Nebeneffekt beim Ausführen der von mir kompilierten Exe-Dateien.

Und das gilt für XP Professional.

Das gilt aber nicht für XP Home SP2, denn hier habe ich das Prob nur in deiner mitgelieferten Exe nicht jedoch in der von mir kompilierten... (D2005 Pro).

generic 28. Mär 2008 20:47

Re: VST und der ungewollte Selektionsrahmen...
 
ich sage das nicht gerne, aber bei mir tritt der fehler auch nicht auf.

phreax 28. Mär 2008 20:52

Re: VST und der ungewollte Selektionsrahmen...
 
So ein Mist, was kommt denn als Fehlerquelle in betracht, mal vom Betriebssystem abgesehen?
Ich hab den VST gerade heute nochmal neu aufgespielt... Daran kann es eigentlich nicht liegen...
Und ich bin nicht sonderlich scharf darauf mein Turbodelphi neu aufzusetzen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 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