Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
1-1079012018
Budy
2004-03-11 16:33
2004.03.28
Обработчик для кнопок


8-1069309640
DAndrew
2003-11-20 09:27
2004.03.28
Как осуществить "заворачивание" слов в TextOutW или ExtTextOut W?


14-1078001579
Layner
2004-02-28 23:52
2004.03.28
Люди, никто не ставил на комп где стоит NT2000, 98, 2й ОС?


8-1067257669
Urvin
2003-10-27 15:27
2004.03.28
Размер Экрана и ДиректХ


14-1077718833
Undert
2004-02-25 17:20
2004.03.28
MySQL