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/)
-   -   TMS TAdvDetailDropDown: ItemIndex wird ignoriert (https://www.delphipraxis.net/160857-tms-tadvdetaildropdown-itemindex-wird-ignoriert.html)

Jazzman_Marburg 4. Jun 2011 14:19

TMS TAdvDetailDropDown: ItemIndex wird ignoriert
 
Hallo Gemeinde!
Vielleicht hat jemand von euch ja auch von TMS die DropDown Komponente TAdvDetailDropDown (mindestens im Component Pack enthalten). Es gibt bei dieser Komponente zwei Dinge, die mich stören, und vielleicht hat das jemand von euch auch oder gar schon gelöst:
  1. Keine Bilder im zugeklappten Zustand zu sehen
  2. Wenn User ein Item auswählt, wird der ItemIndex zwar entsprechend geändert, aber das neue Item wird nicht angezeigt, sondern nur das Defualt-Item.

Zum ersten Problem: Ich habe das myAdvDropDown mit einer Image-Liste verheiratet. Wenn der User die DropDown nun aufklappt sieht er die Items mit einem kleinen Icon davor. Sowiet so gut. Aber das ausgewählte (oder das Default) Item bekommt kein Icon. Merkwürdig -- oder Standard?!

Das zweite Problem ist wesentlich ernster: Wenn der User zur Laufzeit nun ein Item aus der DropDown-Liste auswählt, dann ändert sich zwar der Item-Index (weil ich im Code darauf reagiere, und das funktioniert prima), aber es wird anschließend wieder nur das Default-Item angezeigt -- so als ob der User nichts gerade ausgewählt hat. Das ist nicht nur sehr unschön, sondern auch sehr verwirrend: Ich bekomme ja mit, dass sich der ItemIndex geändert hat -- nur die DropDown-Liste selbst, zeigt nicht das neue Item.

Habt ihr eine Idee, was da los ist?

Vielen Dank & Gruß
Jazzman

Uwe Raabe 4. Jun 2011 14:42

AW: TMS TAdvDetailDropDown: ItemIndex wird ignoriert
 
Zu 1: das scheint so "as designed" zu sein. Wäre mal einen Feature-Request wert.

Zu 2: das kann ich bei mir nicht nachvollziehen. Kannst du mal ein abgestripptes Beispiel anhängen?

Jazzman_Marburg 4. Jun 2011 16:05

AW: TMS TAdvDetailDropDown: ItemIndex wird ignoriert
 
Hallo Uwe.

Ich hatte gerade das Minimal-Beispiel gebaut -- und wie der berühmte Vorführeffekt: Ich konnte es nicht mehr nachvollziehen. Also habe ich das Beispiel immer mehr erweitert, und nun habe ich das Problem eingrenzen können:

Delphi-Quellcode:
procedure TMain_Form.AdvDetailDropDown2Change(Sender: TObject);
VAR
  SucheKnoten : TTreeNode;
  KnotenLbl  : String;

begin

  KnotenLbl := '';
  CASE AdvDetailDropDown2.ItemIndex OF
    0 : KnotenLbl := 'Audi';
    1 : KnotenLbl := 'BMW';
    2 : KnotenLbl := 'Chrysler';
    3 : KnotenLbl := 'Daimler';
  END;

  SucheKnoten := SearchNodeByText(TreeView, KnotenLbl);

  IF SucheKnoten = NIL THEN
    ShowMessage('Node not found!')
  ELSE
  BEGIN
    //TreeView.SetFocus; <== Das verursacht, dass die DropDown-Liste nicht das ausgewählte Item anzeigt
    SucheKnoten.Selected := True;
    TreeView.TopItem    := SucheKnoten;
    SucheKnoten.MakeVisible;
  END;

end;
D.h. das explizite Setzen des Focus auf ein anderes Control, verursacht das Problem.
Ich habe die Zeile wie oben nun auskommentiert, da ich erstmal ohne sie leben kann, aber merkwürdig ist schon, oder?

Vielen Dank & Gruß
Jazzman

Uwe Raabe 4. Jun 2011 16:27

AW: TMS TAdvDetailDropDown: ItemIndex wird ignoriert
 
Zitat:

Zitat von Jazzman_Marburg (Beitrag 1104592)
D.h. das explizite Setzen des Focus auf ein anderes Control, verursacht das Problem.
Ich habe die Zeile wie oben nun auskommentiert, da ich erstmal ohne sie leben kann, aber merkwürdig ist schon, oder?

Eigentlich gar nicht so merkwürdig. Es ist einfach nicht die feine Art, dem Control im DropDownChange den Focus zu entziehen. Das bewirkt wahrscheinlich, daß das Control das Change nicht mehr zu Ende bringen kann. Vielleicht findest du einen anderen Event, bei dem du dem TreeView den Focus geben kannst.

Mal abgesehen davon, daß das Wechseln des Focus überhaupt hier durchaus hinterfragt werden kann.

Jazzman_Marburg 4. Jun 2011 16:50

AW: TMS TAdvDetailDropDown: ItemIndex wird ignoriert
 
Ja, Deine Erklärung verstehe ich. Das war sicher keine gute Idee.

Vielen Dank! :thumb:

(Ansonsten bin ich ja auch begeistert von den TMS Sachen!)

Gruß
Jazzman

himitsu 4. Jun 2011 17:55

AW: TMS TAdvDetailDropDown: ItemIndex wird ignoriert
 
ItemIndex.....

Eventuell haben die TMS-Dinger auch sowas "Krankes", wie die DevExpress-Dinger.

Bei DevExpress ist es so:
Dort gibt es quasi neben ItemIndex noch CurItemIndex, wobei die CurXXX-Property den aktuellen Wert darstellen und bei den "normalen" Property haben die es derart "optimiert", daß dort nicht der aktuelle Wert drin steckt. :wall:


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