Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Вниз

CheckListBox   Найти похожие ветки 

 
Igor_thief ©   (2004-03-01 20:29) [0]

CheckListBox
Что за бред? Короче делаю я некоторые элементы этого списка с галками заголовками(header – ну типа без галки). Но вот прикол подкрался, мол, если кликнуть по header элементу в том месте, где должна быть галка, то срабатывает событие компонента OnClickCheck и отмечается галка, которая не отображается. Что за бред?
Но это еще не все! Мне надо в ручную перерисовать компонент. Ну вот как я это делаю:
procedure TfrmCategory.DrawCB(Rect: TRect; Index, CBState: integer);
var
 CBRect: TRect;
begin
 CBRect.Top := Rect.Top + (clbCategory.ItemHeight - 12) div 2;
 CBRect.Left := Rect.Left + (clbCategory.ItemHeight - 12) div 2;
 CBRect.Bottom := CBRect.Top + 12;
 CBRect.Right := CBRect.Left + 12;
 DrawFrameControl(clbCategory.Canvas.Handle, CBRect, DFC_BUTTON, CBState);
 clbCategory.Canvas.TextOut(Rect.Left + 22, Rect.Top + 3, clbCategory.Items[Index]);
end;

procedure TfrmCategory.clbCategoryDrawItem(Control: TWinControl;
 Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
 CBState: integer;
begin
  if clbCategory.Header[Index] then
   with clbCategory.Canvas do
     begin
       Font.Style := [fsBold];
       FillRect(Rect);
       Pen.Style := psInsideFrame;
       Pen.Color := clBlack;
       Polyline([Point(Rect.Left, Rect.Bottom - 1), Point(Rect.Right, Rect.Bottom - 1)]);
       Pen.Color := clBtnShadow;
       Polyline([Point(Rect.Left, Rect.Bottom - 2), Point(Rect.Right, Rect.Bottom - 2)]);
//Ну типа скрываю абажур при выделении заголовка        
if odSelected in State then clbCategory.Canvas.DrawFocusRect(Rect);
//Далее сложилась ситуация: мне надо, чтобы если элемент Index является header и //элемент Index + 1 тоже, то в этих элементах надо нарисовать галки
       if Index <> clbCategory.Count - 1 then
         begin
           if clbCategory.Header[Index + 1] then
             begin
               if not clbCategory.Checked[Index] then CBState := DFCS_BUTTONCHECK or DFCS_FLAT
               else CBState := DFCS_BUTTONCHECK or DFCS_FLAT or DFCS_CHECKED;
               DrawCB(Rect, Index, CBState);
             end
           //а это header без галки
           else TextOut(Rect.Left + 2, Rect.Top + 3, clbCategory.Items[Index]);
         end
       else //ну и последний элемент списка если header, то с галкой
         begin
           if not clbCategory.Checked[Index] then CBState := DFCS_BUTTONCHECK or DFCS_FLAT
           else CBState := DFCS_BUTTONCHECK or DFCS_FLAT or DFCS_CHECKED;
           DrawCB(Rect, Index, CBState);
         end;
     end
 else
   // ну а это простые элементы
   with clbCategory.Canvas do
     begin
       FillRect(Rect);
       TextOut(Rect.Left + 5, Rect.Top + 3, clbCategory.Items[Index]);
     end;
end;
Ну так глюк заключается в том, что при отладке все работает правильно, а при работе проги совсем не правильно. В чем проблема?
//точка осатова устанавливалась в OnClickCheck
procedure TfrmCategory.clbCategoryClickCheck(Sender: TObject);
var
 CBState: integer;
Begin
//при запуске ch = false
   if Ch then
   begin
        if clbCategory.Checked[clbCategory.ItemIndex] = false then
       begin
         Ch := false;
         Exit;
       end;
     MessageDlg("&#194;&#251;&#225;&#240;&#224;&#237;&#237;&#238;&#233; &#236;&#238;&#230;&#229;&#242; &#225;&#251;&#242;&#252; &#242;&#238;&#235;&#252;&#234;&#238; &#238;&#228;&#237;&#224; &#234;&#224;&#242;&#229;&#227;&#238;&#240;&#232;&#255;.", mtInformation, [mbOK], 0);
     clbCategory.Checked[clbCategory.ItemIndex] := false;
   end
 else Ch := true;
end;
Это сделано для того, чтобы можно было отметить только один элемент.


 
Cobalt ©   (2004-03-01 22:44) [1]

> отмечается галка, которая не отображается.

Что за бред?

Может простыми словами опишешь ситуации, когда надо отмечать, когда - не надо?


 
Igor_thief ©   (2004-03-02 13:58) [2]

Надо чтобы была возможность отметить галкой только один элемент (и не забыть при этом, что мы в некоторых заголовках самостоятельно выводим галку). Этот компонент взят из-за того, что у него есть возможность автоматически создавать галки и заголовки (а то в ручную впадло определять место нажатия миши и прорисовывать галки). Но вот слом, в заголовках гадки не отображаются, но если кликнуть в том месте, где должна быть галка, то срабатывает событие OnClickCheck и элемент "стает" Checked = true.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.03 c
14-1077711896
Mystic
2004-02-25 15:24
2004.03.28
Работы Р. Пенроуза (атака тайны разума, ИИ)


1-1078391709
sergej
2004-03-04 12:15
2004.03.28
Fast report


11-1056811361
mike.dld
2003-06-28 18:42
2004.03.28
Streams


1-1078928524
vin
2004-03-10 17:22
2004.03.28
Частичная отрисовка канвы


14-1077854047
R
2004-02-27 06:54
2004.03.28
Какой язык программирования для Internet выбрать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский