if not Flag then
Begin
frmMain.Hide;
Form1.Show;
End;я например вынес темп папки рабочий стол и загрузки на другой ссд, файл подкачки тоже, 100 гиг винде вполне хватает, если задрот то и сохраненки тоже можно вынести
var
frmMain: TfrmMain;
...
Queens: array [0..MaxQueensCount-1, 0..MaxQueensCount-1] of boolean;
img1, img2: TPicture;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i, j: Integer;
begin
...
for i := 0 to MaxQueensCount-1 do
for j := 0 to MaxQueensCount-1 do
Queens[i, j] := false;
img1:= TPicture.Create;
img1.LoadFromFile('E:\Ферзь 1.bmp');
img2:= TPicture.Create;
img2.LoadFromFile('E:\Ферзь 2.bmp');
end;
procedure TfrmMain.grdChessBoardClick(Sender: TObject);
var
CellColor: TColor;
begin
Queens[grdChessBoard.Col, grdChessBoard.Row] := not Queens[grdChessBoard.Col, grdChessBoard.Row];
with grdChessBoard do
if Queens[grdChessBoard.Col, grdChessBoard.Row] then
begin
if (Col + Row) mod 2 = 0 then
Canvas.StretchDraw(CellRect(Col, Row), img1.Graphic)
else
Canvas.StretchDraw(CellRect(Col, Row), img2.Graphic);
end
else
begin
if ((Col + Row) mod 2) = 0 then
CellColor := clWhite
else
CellColor := clGray;
grdChessBoard.Canvas.Brush.Color := CellColor;
grdChessBoard.Canvas.FillRect(CellRect(Col, Row));
end;
end;
procedure TfrmMain.grdChessBoardDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
CellColor: TColor;
begin
with grdChessBoard do
if Queens[ACol, ARow] then
begin
if (ACol + ARow) mod 2 = 0 then
Canvas.StretchDraw(CellRect(ACol, ARow), img1.Graphic)
else
Canvas.StretchDraw(CellRect(ACol, ARow), img2.Graphic);
end
else
begin
if ((ACol + ARow) mod 2) = 0 then
CellColor := clWhite
else
CellColor := clGray;
Canvas.Brush.Color := CellColor;
Canvas.FillRect(Rect);
end;
end;попробую 4 поставитьВот в этом и главная беда! Ничего устанавливать не надо. Только автоматически, по выбору операционной системы!
Знаем, по какой клетке кликнули.
По массиву ферзей определяем пустая клетка или нет.
Если не пустая, то хочет убрать. Это можно всегда. Убираем. Перерисовываем.
Если пустая, то сначала проверять можно ли в это клетку ставить.
Если можно, то ставим и рисуем, если нет, ругаемся.
Про буквы я примерно знаю причину, но расписывать долго. Если кратко, Дельфи в разных случаях, в разных компонентах рисует текст разными механизмами. В нашем случае не включено сглаживание. Если время будет, я попробую реализовать включение.
И ещё. Про избавление от абсолютных путей всё забываю написать. Кладёте Ферзь 1.bmp и Ферзь 2.bmp в одну папку с EightQueensPuzzle.exe. А в коде пишете так:
img1.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Ферзь 1.bmp');
img2.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Ферзь 2.bmp');
И они всегда и у всех будут находиться.
Совсем хорошо их вообще в ресурсы засунуть, чтобы отдельных файлов не было. Но это уже другая история.