Dobra, zrobiłem ci to drugie, bo się szybciej pisze, na drugie nie mam czasu, od rana jestem na nogach i dopiero co wróciłem do domu i zaraz ide w kimę. Nie chce mi się nic opisywać, zarzucę ci gotowy kod. Swoją drogą nie wierze, żebyś sam nie potrafił tego zrobić...
dobra, to pokolei, najpierw w uses dodaj Buttons bo skorzystamy z TSpeedButton. Teraz stwórz tablicę [1..8,1..8] of TSpeedButton; Teraz kolej na dynamiczne stworzenie tych 64 przycisków:
procedure cośtam(Sender: TObject); //np. Button1 Click albo gdzieś
var x,y:Integer;
begin
for y:=1 to 8 do
for x:=1 to 8 do begin
przyciski[x,y]:=TSpeedButton.Create(Form1);
with przyciski[x,y] do begin
Parent:=Self;
Left:=10+(x-1)*32;
Top:=10+(y-1)*32;
Width:=32;
Height:=32;
GroupIndex:=(y-1)*8+x;
OnClick:=Klikniecie;
end;
end;
end;
Teraz kolej na stworzenie procedury Klikniecie. Jest ona po to, żeby speedbutton po kliknięciu sporotem wyskakiwał do góry (tak swoją drogą, to żeby każdy z osobna skakał w dół, musi mieć inny groupindex, obacz poprzednią procke):
procedure TForm1.Klikniecie(Sender: TObject);
begin
(Sender as TSpeedButton).AllowAllUp:=true;
end;
Oczywiście ta procka musi być zdeklarowana w jakimś publicku czy gdzie tam sobie chcesz. To teraz zliczanie tych twoich bitów, bajtów i innych szmerów. Przyda się także procka do potęgowania, bo pod tym względem delphi jest biedne, albo ja jestem tempy i nie znam polecenia do potęgowania :P :
function potega(podstawa,wykladnik: Integer): Integer;
var i:Integer;
begin
if wykladnik=0 then result:=1
else begin
result:=podstawa;
for i:=2 to wykladnik do
result:=result*podstawa;
end;
end;
//i w końcu to liczenie - ja to walnąłem do memo1, a ty rób, gdzie ci się podoba:
procedure cośam2; //np. kliknięcie 2 buttona
var x,y,bajt: Integer;
begin
Memo1.Lines.Clear;
for y:=1 to 8 do begin
bajt:=0;
for x:=8 downto 1 do
If przyciski[x,y].Down then bajt:=bajt+potega(2,x-1);
Memo1.Lines.Add(IntToStr(bajt));
end;
end;
No, może ta zmienna bajt by mogła być typu Byte, x i y też, no ale co tam - zrobiłem to na szybko i z nudów, na tej samej zasadzie bez problemu chyba zrobisz sobie to pierwsze zagadnienie... Oczywiście to co tutaj prezentuje to jest zrobione po linii najmniejszego oporu, ale co tam :P Jak narzekasz to masz. Chyba nie trudne, skoro nawet ja sobie z tym poradziłem, nie?