procedure TFormKasa.ListView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i: Integer;
begin
try
with ListView1 do
begin
for i := 0 to Items.Count - 1 do
if Items[i].Checked then
begin
btKapat.Enabled := true
end else
btKapat.Enabled := False;
end;
finally
end;
end;
var
I: Integer;
found: Boolean;
begin
found := False;
for I := 0 to pred(Items.Count) do
begin
found := Items[I].Checked;
if found then
break;
end;
btnKapat.Enabled := found;
end;
Öncelikle MouseDown Event'inin yapmak istediğiniz iş için uygun olmadığını düşünüyorum. CheckBox'ları klavyeden boşluk (Space) tuşu ile de işaretleyebilrsiniz. Bu durumda sizin kodunuz çalışmayacaktır. Bunun için en uygun Event'in Change Event'i olduğunu düşünüyorum. Aşağıdaki kodu deneyip sonucu gözlemleyebilirsiniz. Delphi'deki ListView'ın sadece checkbox seçimi ile ilgili bir Event'i yok. Bu yüzden alternatifleri kullanıyoruz. Aşağıdaki kod da tam doğru bir çözüm değil. Çünkü Change event'i ListView'a yeni bir Item eklediğinizde de çalışır. Eğer çok fazla Item eklenecek ise performans açısından sürekli aynı şeyi yapmaması için ekleme anında bu kodu bir şekilde bypass ettirmeniz gerekir. Bu sorunu, ekleme anını belirten mantıksal bir değişken yardımı ile çözebilirsiniz.
Bilgi olarak söylüyorum; Yeni bir Item eklendiğinde, aşağıdaki procedure'e bir kaç gelmektedir. Bunu engellemek için Change parametresini kullandım.
procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem; Change: TItemChange);
var i: integer;
begin
if Change = ctState then
begin
btKapat.Enabled := False;
for i := 0 to ListView1.Items.Count - 1 do
if ListView1.Items[i].Checked then
begin
btKapat.Enabled := True; Exit;
end;
end;
end;