Ругается, если не задана одна из размерностей. Проставь в едитах по умолчанию тройки, и код модифицируй как-то так (мог напутать в выделенных строках, писал прямо тут).
Код:
m:=StringGrid1.ColCount; // ??
n:=StringGrid1.RowCount; // ??
for i:=0 to m-1 do
for j:=0 to n-1 do
a[i,j] := StrToInt(StringGrid1.Cells[i,j]);
p:=StringGrid2.ColCount; // ??
q:=StringGrid2.RowCount; // ??
for i:=0 to p-1 do
for j:=0 to q-1 do
b[i,j] := StrToInt(StringGrid2.Cells[i,j]);
For i:=0 to m-1 do
For j:=0 to q-1 do
Begin
x[i,j]:=0;
For l:= 1 to n-1 do
x[i,j]:=x[i,j]+a[l,i]*b[j,l];
end;
for i:=0 to m-1 do
for j:=0 to q-1 do
StringGrid3.cells[i,j]:=IntToStr(x[i,j]);
P.S. И ещё заметил любопытную ошибку. При изменении A.Y (кол-во столбцов первой матрицы) изменяется B.X. А вот если менять B.X - изменений в A.Y не происходит.
P.P.S. Код желательно чистить от мусора перед заливкой - *.~*, *.dcu, *.ddp... Хорошо, что хоть *.exe удалён

P.P.P.S. Иконка приложения из Delphi 5? Да-да, я её ещё помню
