AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree Relativer HitPoint

Ein Thema von Hobbycoder · begonnen am 8. Jun 2022 · letzter Beitrag vom 8. Jun 2022
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#1

VirtualStringTree Relativer HitPoint

  Alt 8. Jun 2022, 10:52
Hi,

ich möchte im OnNodeClick einem VirtualStringTree den HitPoint excakt in einer Zelle bestimmem.
Nehmen wir eine Cell mit den Maßen 20 x 20. Beim Klich benötige ich den Point z.B. (5,8) den der User innerhalb der Column des Nodes angeklickt hat.
Ich erhalte aber in der HitInfo nur den absoluten HitPoint, also z.B. (156,256).
Wie kann ich den auf die Zelle umrechnen lassen, so dass ich immer die relative Position erhalte.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: VirtualStringTree Relativer HitPoint

  Alt 8. Jun 2022, 11:46
Delphi-Quellcode:
procedure TDeineform.DeineVirtualTreeViewNodeClick(Sender: TBaseVirtualTree; const HitInfo: THitInfo);
var
    Column: TVirtualTreeColumn;
    ColumnX, ColumnY: Integer;
begin
    Column := Sender.Header.Columns[HitInfo.HitColumn];
    ColumnX := HitInfo.HitPoint.X - Column.Left;
    ColumnY := (HitInfo.HitPoint.Y + Sender.OffsetY) - (HitInfo.HitNode.Index * HitInfo.HitNode.TotalHeight);

    Caption := 'HitColumn: ' + Integer(HitInfo.HitColumn).ToString + ' - X:' + ColumnX.ToString + ' - Y:' + ColumnY.ToString;
end;
Geht vielleicht noch eleganter, zumindest sehen die Ergebnisse einigermaßen stimmig aus.
Abweichungen wegen mit oder ohne Rand einer Zelle bitte berücksichtigen, falls vorhanden.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#3

AW: VirtualStringTree Relativer HitPoint

  Alt 8. Jun 2022, 11:58
Danke,

ich hatte zwischendurch eine andere Lösung gefunden:
Delphi-Quellcode:
procedure TForm1.vstTermineNodeClick(Sender: TBaseVirtualTree;
  const HitInfo: THitInfo);
var
  A: TAuftrag;
  T: TTeamWeekView;
  R: TRect;
begin
  case rgAnsicht.ItemIndex of
    0: ;
    1: begin
         TeamWeekViewList.UnSelectAll;
         T:=TTeamWeekView(vstTermine.GetNodeData(HitInfo.HitNode)^);
         R:=vstTermine.GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, False);
         a:=nil;
         case HitInfo.HitColumn of
           1: A:=T.Montag.FindAuftragAt(Point(HitInfo.HitPoint.X, HitInfo.HitPoint.Y-R.Top), nil);
           2: A:=T.Dienstag.FindAuftragAt(Point(HitInfo.HitPoint.X, HitInfo.HitPoint.Y-R.Top), nil);
           3: A:=T.Mittwoch.FindAuftragAt(Point(HitInfo.HitPoint.X, HitInfo.HitPoint.Y-R.Top), nil);
           4: A:=T.Donnerstag.FindAuftragAt(Point(HitInfo.HitPoint.X, HitInfo.HitPoint.Y-R.Top), nil);
           5: A:=T.Freitag.FindAuftragAt(Point(HitInfo.HitPoint.X, HitInfo.HitPoint.Y-R.Top), nil);
           6: A:=T.Samstag.FindAuftragAt(Point(HitInfo.HitPoint.X, HitInfo.HitPoint.Y-R.Top), nil);
         end;
         if A<>nil then
         begin
           A.Selected:=True;
           vstTermine.Invalidate;
         end;
       end;
    2: ;
  end;
end;
Scheint auch soweit zu funktionieren.

Ich habe noch nicht getestet, was passiert, wenn ich gescrollt habe, weil in der Anwendung alle Nodes immer im Sichtbaren bereich liegen.
Möglichweise ist da deine Lösung besser. Mal ausprobieren...
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 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