Главная страница
    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
1-1078928524
vin
2004-03-10 17:22
2004.03.28
Частичная отрисовка канвы


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


7-1072264252
nester
2003-12-24 14:10
2004.03.28
Как внедрить свой тулбар в оутлук?


1-1078724715
Артем К.
2004-03-08 08:45
2004.03.28
Как создать свой скролл бар и присобачить его к форме


6-1074456340
Эл
2004-01-18 23:05
2004.03.28
Использование TTcpClient





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский