BCB 2009: OnShowHint



  • Hallo,

    ich hab ein Projekt von BCB 6 auf BCB 2009 umgestellt. In der 6er Version hatte ich:
    Application->OnShowHint=OnShowHint;

    Den Code hab ich aus einem Forum. Damit wurden längere ListBox Einträge angezigt. Wie mach in das im 2009er ?

    void __fastcall TfrmSanjeevini::OnShowHint(System::AnsiString &HintStr,
      bool &CanShow, THintInfo &HintInfo)
    {
      // Falls Hint zu einer ListBox angzeigt werden soll:
      if(HintInfo.HintControl->ClassNameIs("TListBox"))
      {
        // Zeiger casten:
        TListBox* pListBox = static_cast<TListBox *>(HintInfo.HintControl);
        // ListBox-Index des Eintrags unter dem Mouse-Cursor ermitteln:
        int ilIndex = pListBox->ItemAtPos(HintInfo.CursorPos, true);
    
        // Falls die Eintragsbreite grösser, als die ListBox-ClientBreite:
        //if(ilIndex >= 0 && pListBox->Canvas->
          //TextWidth(pListBox->Items->Strings[ilIndex]) >
          //  pListBox->ClientRect.Right-pListBox->ClientRect.Left)
        //{
          if (ilIndex >= 0)
          {
          CanShow = true;
    
          // Hint-Position, Farbe, Text etc. anpassen:
          HintInfo.HintPos.x = 0;
          HintInfo.HintPos.y = pListBox->ItemHeight*(ilIndex-pListBox->TopIndex);
          HintInfo.HintPos = pListBox->ClientToScreen(HintInfo.HintPos);
          HintInfo.HintColor = clWhite;
          HintInfo.ReshowTimeout = 200;
    	  HintInfo.HintStr = pListBox->Items->Strings[ilIndex];
    	  }
    	//}
    	// Falls schon komplett sichtbar, Hint nicht anzeigen:
    	//else CanShow = false;
      }
    }
    


  • Was genau funktioniert denn davon nicht im 2009er? Fehlermeldungen?

    [Edit] Auch beim BCB 2009 gibt es eine Hilfe, schau dort mal nach OnShowHint und vergleiche den Funktionskopf und pass ihn an [/Edit]



  • [BCC32 Fehler] cQuellen.cpp(153): E2034 Konvertierung von 'void (_fastcall * (_closure )(AnsiString &,bool &,THintInfo &))(AnsiString &,bool &,THintInfo &)' nach 'TShowHintEvent' nicht möglich



  • Hallo

    Vermutlich erfordert der 2009er UnicodeString anstelle von Ansistring. In diesem Fall must du in der Deklaration der Methode nur System::AnsiString in String abändern.

    bis bald
    akari


Anmelden zum Antworten