Консультация № 69979
08.01.2007, 12:28
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты!
Я 2-й день изучаю Delphi и вот у меня возникли вопросы.
Мне необходимо выполнить такое задание:
Создать проект, содержащий 3 кнопки со следующими функциями:
1-я кнопка
переключает видимость 2-й и 3-й (видна только одна из кнопок по очереди);
2-я кнопка (учесть реальные ограничения, связанные с размером формы)
сдвигает первую на 10 пикселей вниз;
3-я кнопка
перебирает тип курсора;
Щелчок на форме и <ALT-I> восстанавливают начальное состояние.
Двойной щелчок и <ALT-X>- закрывают форму.
Для каждой кнопки определить подсказку (Hint).

Пока получилось только со 2-й. (см. прил.) Как реализовать остальное просто не знаю. В учебном пособие про это ничего не говорится.

И еще один вопрос:
Как поменять местами строки и столбцы массива так, чтобы минимальный элемент находился в правом верхнем углу?

Когда-то на Паскале проходили сортировку массивов. Как это осуществляется в Delphi?

Приложение:
procedure TForm1.Button2Click(Sender: TObject);beginButton1.Top:=Button1.Top+10; {сдвиг}if (Button1.Top+Button1.Height)>Form1.Height-Button1.Height*2-10 thenButton1.Top:=Form1.Height-Button1.Height*2-10; {чтоб кнопка не убежала за пределы формы} end;

Обсуждение

Неизвестный
08.01.2007, 16:30
общий
это ответ
Здравствуйте, Аленка!
см. приложение!
Каждый обрботчик в название содержит название метода, к которому он должен быть назначен. (Например: "procedure Button1Click(Sender:TObject);" должен быть назначен методу OnClick компонента Button1)

Теперь что касается массива.
допустим у тебя есть массив:
var
Ar:array [0..15, 0..15] of Byte;
алгоритм будет выглядеть так (предполагается что массив инициализирован)
procedure Sort;
var
i, j, k, l, n, m:Byte;//Çà÷åì òðàòèòü ïàìÿòü!
begin
for j:=0 to 15 do
for i:=15 downto 0 do //ïåðåáîð ìàññèâà íà÷èíàÿ ñ ïðàâîãî âåðõíåãî óãëà è çàêàí÷èâàÿ ëåâûì íèæíèì
begin
for l:=j to 15 do
begin
if l=j then n:=i-1 else n:=15;
if n=$FF then n:=0;
for k:=n downto 0 do
begin
if Ar[i, j]>Ar[k, l] then
begin
m:=Ar[i, j];
Ar[i, j]:=Ar[k ,l];
Ar[k, l]:=m;
end
end;
end;
end;
end;

Приложение:
{Код первой кнопки}procedure TForm1.Button1Click(Sender: TObject);begin if (Button2.Visible)and(Button3.Visible) then begin Button3.Visible:=False; Exit; end; if (not Button2.Visible)and(Button3.Visible) then begin Button3.Visible:=True; Button3.Visible:=False; Exit; end; if (Button2.Visible)and(not Button3.Visible) then begin Button2.Visible:=False; Button3.Visible:=True; Exit; end;end;{Код второй кнопки}procedure TForm1.Button2Click(Sender: TObject);begin if (Button1.Top+Button1.Height+10)<ClientHeight then Button1.Top:=Button1.Top+10 else Button1.Top:=ClientHeight-Button1.Height;end;{Код третьей кнопки}procedure TForm1.Button3Click(Sender: TObject);begin if Form1.Cursor-1>-22 then Form1.Cursor:=Form1.Cursor-1 else Form1.Cursor:=0; Button1.Cursor:=Form1.Cursor; Button2.Cursor:=Form1.Cursor; Button3.Cursor:=Form1.Cursor;end;{Динамическое определение Hint‘ов}procedure TForm1.FormCreate(Sender: TObject);begin Button1.Hint:=‘Кнопка 1‘; Button2.Hint:=‘Кнопка 2‘; Button3.Hint:=‘Кнопка 3‘;end;{Код для реагирования на Alt+I и Alt+X}procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);begin case Key of ‘I‘:if GetAsyncKeyState(VK_MENU)<>0 then Tag:=1; ‘X‘:if GetAsyncKeyState(VK_MENU)<>0 then Tag:=2; else Tag:=0; end;end;procedure TForm1.FormClick(Sender: TObject);begin if Tag=1 then begin Button1.Top:=8; Button2.Visible:=True; Button3.Visible:=False; end;end;procedure TForm1.FormDblClick(Sender: TObject);begin if Tag=2 then Close;end;
Форма ответа