سلام
با gbg موافقم. البته ممکنه براش کامپوننت نوشته باشند ولی بعید میدونم کامپوننت تجاری و منتشر شده ای باشه.
در هر صورت در اوردنش با چندتا Image کاری نداره،
دو سری عکس برای انتخاب شده و انتخاب نشده بذار رو فرم،
دو تا آرایه از TImage و یک آرایه از Boolean تعریف کن.
تگای عکس هارو ست کن، به همه عکس ها غیر از "همه" یک OnClick اختصاص بده، توی OnClick عکس هاعنصر موازی تگ عکس توی آرایه از Boolean رو برعکس کن Visible عکسای انتخاب شده و نشده رو مطابق با مقدار آرایه Boolean ست کن و بعد هم function بروزرسانی لیستت رو با پارامتر آرایه Boolean فرا خونی کن. توی OnClick "همه" هم کل آرایه رو True کن و ...
اگرم براش کامپوننت بنویسی که کلی پوئنت می ره بالا! دوتا ImageList و چهارتا Canvas.Draw و یک پردازش مختصات کلیک تو MouseDown و کلی ثواب دنیوی و اخروی.
TForm1 = class(TForm)
ImageSelectedCharacter1: TImage;
ImageSelectedCharacter2: TImage;
...
ImageUnselectedCharacter1: TImage;
ImageUnselectedCharacter2: TImage;
...
ImageSelectedAllCharacters: TImage;
ImageUnselectedAllCharacters: TImage;
procedure ImageSelectedCharacter1Click(Sender: TObject);
procedure ImageSelectedAllCharactersClick(Sender: TObject);
private
const
MaxIndex = 31;
private
SelectedImages, UnselectedImages: array [0..MaxIndex] of TImage;
SelectedCharacters: array [0..MaxIndex] of Boolean;
procedure UpdateList(SelectedCharacters: array of Boolean);
end;
...
procedure TForm1.ImageSelectedAllCharactersClick(Sender: TObject);
var
I: Integer;
Flag: Boolean;
begin
Flag:=Sender = ImageSelectedAllCharacters;
for I := 0 to MaxIndex do
begin
SelectedCharacters[I]:=Flag;
SelectedImages[I].Visible:=Flag;
UnselectedImages[I].Visible:=not Flag;
end;
ImageSelectedAllCharacters.Visible:=Flag;
ImageUnselectedAllCharacters.Visible:=not Flag;
UpdateList(SelectedCharacters);
end;
procedure TForm1.ImageSelectedCharacter1Click(Sender: TObject);
var
Index: Integer;
begin
Index:=(Sender as TImage).Tag;
SelectedCharacters[Index]:=not SelectedCharacters[Index];
SelectedImages[Index].Visible:=SelectedCharacters[Index];
UnselectedImages[Index].Visible:=not SelectedCharacters[Index];
UpdateList(SelectedCharacters);
end;
procedure TForm1.UpdateList(SelectedCharacters: array of Boolean);
begin
// do update list
end;
موفق باشید