Announcement

Collapse
No announcement yet.

combobox items als hint

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • combobox items als hint

    hallo,

    ich möchte folgendes:
    wenn man eine combobox aufklappt und mit der maus über einen item schwebt, soll der vollständige text des items als hint angezeigt werden!

    geht das und wenn ja wie?
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    das geht meiner Meinung nach nur, indem Du das Zeichnen der Einträge selbst übernimmst (Style auf eine der beiden OwnerDraw... setzen, und eins der beiden Ereignisse z.B OnDrawItem() verwendest). Dort kannst Du über die Eigenschaft State ermitteln ob der Mauszeiger über einem Eintrag steht (odHotLight). Funktioniert laut der Online-Hilfe im BCB aber nicht mit allen OS.

    Ist mit recht viel Aufwand verbunden, da Du die Komplette Ausgabe auf den Canvas selbst machen mußt. Ist die Frage, ob sich der Aufwand lohnt, insbesondere da es eben nicht mit allen Betriebssystemem funktioniert...

    Codebeispiel hab' ich nicht, da ich es noch nicht gemacht hab' (die wären aber auch in C++).

    Grüße Joche

    Comment


    • #3
      Hi Markus,<br>
      Kuck mal hier: http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&oe=UTF-8&threadm=VA.00007b87.013b7139%40antispam.compuser ve.com&rnum=1&prev=/groups%3Fq%3Ddelphi%2Blistbox%2Bpeter%2Bbelow%2Bhi nt%26hl%3Dde%26lr%3D%26ie%3DUTF-8%26oe%3DUTF-8%26selm%3DVA.00007b87.013b7139%2540antispam.compu serve.com%26rnum%3D1
      <p>Uli

      Comment


      • #4
        Hallo Ulrich,

        in meinem BCB6 hat TComboBox die verwendete Methode (ItemAtPos) nicht. Scheint nur für TListBox zu funktionieren. Oder habe ich da was übersehen?

        Grüße Joche

        Comment


        • #5
          Uupsi -- hab's nur mit ner Listbox probiert. <p>Aber vielleicht könnte man die Implementation von TCustomListBox.ItemAtPos hernehmen und jeden Bezug auf Handle durch TCustomComboBox.<b>List</b>Handle ersetzen? Keine Ahnung, ob das funktionieren könnte. :-)
          <p>Uli

          Comment


          • #6
            Hallo,<BR>
            eventuell hift dir TOvcComboBox aus den TurboPower Orpheus-Komponenten weiter. Die ComboBox wird beim Aufklappen auf die Breite des längsten Strings erweitert.<BR>
            Die Komponenten sind unter http://sourceforge.net/projects/tporpheus/ zu finden.<BR>
            Gruß Thoma

            Comment


            • #7
              Oder die TELComboBox vom <a href="http://www.lmdinnovative.com/products/lmdelpack/">ElPack</a> verwenden. Diese kann für die ListBox, ComboBox, dieses Feature

              Comment


              • #8
                hi ihr alle!

                und welche lösung geht am schnellsten?

                sind die aufgeführten komponenten alle kostenlos
                Herzliche Grüße

                Markus Lemcke
                barrierefreies Webdesign

                Comment


                • #9
                  Hallo Markus,

                  hm, am schnellsten wäre es wohl die ComboBox breiter zu machen.

                  Würde ich zumindest so machen. Ich hasse es wie die Pest, wenn ich erst irgenwo in einer Liste mit der Maus klicken oder zeigen muß, um den Eintrag komplett lesen zu können.

                  Ansonsten muß Dir die Frage jemand von den Delphi-Spezialisten beantworten. Kenn die Komponenten nicht, hab' den BCB.

                  Grüße Joche

                  Comment


                  • #10
                    Orpheus ist mittlerweile Open Source (Turbopower hat sich ja aus der weiterentwicklung der Delphi-Komponenten Anfang 2003 zurückgezogen.

                    Elpack kosted ein paar $ (99$ für die Standard-Version)

                    Comment


                    • #11
                      Hallo Markus,

                      eine eigene Combobox könnte so aussehen:

                      <pre>
                      type
                      TGrComboBox = class(TComboBox)
                      private
                      FDropDownWidth: integer;
                      FDropDownWidthOrg: integer;
                      FDropDownWidthAuto: boolean;
                      procedure SetDropDownWidth(const Value: integer);
                      { Private-Deklarationen }
                      protected
                      procedure DropDown; override;
                      procedure CloseUp; override;
                      { Protected-Deklarationen }
                      public
                      { Public-Deklarationen }
                      published
                      property DropDownWidth: integer read FDropDownWidth write SetDropDownWidth;
                      property DropDownWidthAuto: boolean read FDropDownWidthAuto write FDropDownWidthAuto;
                      { Published-Deklarationen }
                      end;

                      procedure Register;

                      implementation

                      procedure Register;
                      begin
                      RegisterComponents('GrKomponenten', [TGrComboBox]);
                      end;

                      { TGrComboBox }

                      procedure TGrComboBox.CloseUp;
                      begin
                      inherited;
                      LockWindowUpdate(0);
                      Width:=FDropDownWidthOrg;
                      end;

                      procedure TGrComboBox.DropDown;
                      var
                      max_breite: integer;
                      temp: integer;
                      temp_breite: integer;
                      begin
                      inherited;
                      FDropDownWidthOrg := width;
                      LockWindowUpdate(Handle);
                      if DropDownWidthAuto then
                      begin
                      max_breite :=0;
                      temp := 0;
                      while temp < Items.Count do
                      begin
                      temp_breite := canvas.TextWidth(Items.Strings[temp]);
                      if temp_breite > max_breite then
                      begin
                      max_breite := temp_breite;
                      Width := max_breite + 4;
                      end;
                      inc(temp);
                      end;
                      end
                      else
                      begin
                      if DropDownWidth > 0 then Width := DropDownWidth;
                      end
                      end;

                      procedure TGrComboBox.SetDropDownWidth(const Value: integer);
                      begin
                      FDropDownWidth := Value;
                      end;
                      </pre>

                      Hinweis: es ist keine 100%ig saubere Lösung da Windows immer nur für ein Fenster das zeichnen unterdrücken kann.

                      Torste

                      Comment

                      Working...
                      X