![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#91
|
|||
|
|||
|
У меня снова вопрос - как можно удалить ненужную форму?
|
|
#92
|
||||
|
||||
|
Project - Remove From Project
|
|
#93
|
|||
|
|||
|
The Shadow Спасибо)
|
|
#94
|
|||
|
|||
|
У меня снова вопрос - нужно мне передеалть прогу из вида - 10 кнопок на 1 стринггрид в вид - 1 кнопка на 10 стринггридов.. в общем нужно что бы при нажатии на 1 кнопку заполнялись 3 стринггрида 3-мя матрицами - я это сделал - вот код: (к стати - если можно его как-то сократить, напишите плиз - ато придераются к моим огромным кодам)
Код:
procedure TForm5.Button6Click(Sender: TObject);
var i,j:integer;
begin
begin
n:=7;
m:=11;
setlength(C,n,m);
stringgrid3.RowCount:=n;
stringgrid3.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
C[i,j]:=cos(14*j+1);
stringgrid3.Cells[j,i]:=FormatFloat('0.00',C[i,j]);
end;
end;
begin
n:=8;
m:=15;
setlength(B,n,m);
stringgrid2.RowCount:=n;
stringgrid2.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
B[i,j]:=sin(3.2*j+4.2)+power(exp(1),tan(i));
stringgrid2.Cells[j,i]:=FormatFloat('0.00',B[i,j]);
end;
end;
begin
n:=12;
m:=9;
setlength(A,n,m);
stringgrid1.RowCount:=n;
stringgrid1.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
A[i,j]:=sin(j)/cos(j)+exp(cos(i));;
stringgrid1.Cells[j,i]:=FormatFloat('0.00',A[i,j]);
end;
end;
end;Но проблема у меня в слудующем - нужно на 2-ю кнопку сделать, что бы поменялись определенные столбцы в до этого выведенных матрицах - тоесть еще в 3 стринггрида выводятся 3 новые матрицы (те же - но с замененным столбцами) 0 пихаю типа как выше для заполнения - не работает... вот коды для замены столбцов 3-х матриц - подскажите, пожалуйста, если не трудно... замена столбцов в А Код:
procedure TForm5.Button7Click(Sender: TObject);
var i,j,t:integer;
tmp:real;
begin
m:=stringgrid1.ColCount;
k:=0;
l:=8;
for i:=0 to n-1 do
begin
tmp:=A[i,k];
A[i,k]:=A[i,l];
A[i,l]:=tmp;
end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid4.Cells[j,t]:=FormatFloat('0.00',A[t,j]);
end;замена в B Код:
procedure TForm5.Button9Click(Sender: TObject);
var i,j,t:integer;
tmp:real;
begin
m:=stringgrid1.ColCount;
k:=2;
l:=4;
for i:=0 to n-1 do
begin
tmp:=B[i,k];
B[i,k]:=B[i,l];
B[i,l]:=tmp;
end;
for t:=0 to n-1 do
begin
for j:=0 to m-1 do
begin
stringgrid1.Cells[j,t]:=FormatFloat('0.00',B[t,j]);
end;
end;
end;замена в С Код:
procedure TForm5.Button5Click(Sender: TObject);
var i,j,t:integer;
tmp:real;
begin
m:=stringgrid1.ColCount;
k:=0;
l:=10;
for i:=0 to n-1 do
begin
tmp:=C[i,k];
C[i,k]:=C[i,l];
C[i,l]:=tmp;
end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid1.Cells[j,t]:=FormatFloat('0.00',C[t,j]);
end;Заранее спасибо - ато у меня уже взрыв мозга от это программы ![]() |
|
#95
|
|||
|
|||
|
обмани препода, сделай аналог булевской перменной...создай не булеву перемнную а интэжер, и назначай либо 1 либо 0 в разных ситуациях, сообтветственно и проверяй так же, типа If tram_papam=1 then ...
думаю тебя препод похвалит за сообразительность и...будет час пудрить мозги тебе гениальному что есть спец тип переменных boolean |
|
#96
|
|||
|
|||
|
Просто у меня олучается так - заполняются 3 сразу - но столбцы меняет только в той матрице, которая последней заполнилась... а как сделать что бы в 3-х меняла - это для меня загадка...
|
|
#97
|
||||
|
||||
|
Насчет сокращения кода:
Код:
var
cp: TComponent;
i: integer;
begin
for i:=1 to 3 do
begin
cp := FindComponent('StringGrid'+IntToStr(i));
if cp <> nil then
begin
(cp as TStringGrid).RowCount:=n;
(cp as TStringGrid).ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
A[i,j]:=sin(j)/cos(j)+exp(cos(i));;
(cp as TStringGrid).Cells[j,i]:=FormatFloat('0.00',A[i,j]);
end;
end;
end;
end;
end; ![]() |
|
#98
|
|||
|
|||
|
Zylex спасибо... разберусь... ато им мои коды длинные не нравятся... а с прогой я поступил проще - на 1 кнопку все задал - главное работает
![]() |
|
#99
|
|||
|
|||
|
Много мелких недочетов.
1. В 1 м коде три лишних begin end. Ну это так к слову о сокращении размеров программы. 2. В кодах A, B, C не задан n/ 3. В кодах B и C надо указывать вывод не в StringGrid1 а в соответственно StringGrid5, StringGrid6 4. К вопросу об сокращении кода - ИМХО ничего сокращать не надо. |
|
#100
|
|||
|
|||
|
Цитата:
- но убирать уже че-то стремно....2 - n задана глобально - просто тут не видно 3 - То понятно - просто скопировал коды из случая, когда в 1 все выводилось 4 - Уже и я так думаю, что не надо я рад хоть это работает...ну теперь у меня осталась 1 задача - нужно эту прогу - код ниже сохранить в файле - причем что бы можно было самому указывать к нему путь - и потом, что бы при нажатии на батон можно было открыть тот файл и считать из него в стринггрид - это вообще реально сделать? Если да - то помогите плиз, ато я толком так и не понял как просто сохранять, а им подавай что бы через обзор вот код: Код:
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Math;
type
TForm5 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
StringGrid3: TStringGrid;
StringGrid2: TStringGrid;
StringGrid4: TStringGrid;
StringGrid5: TStringGrid;
StringGrid6: TStringGrid;
Button6: TButton;
Label5: TLabel;
Label8: TLabel;
Button10: TButton;
Label10: TLabel;
Label11: TLabel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label7: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
Y:array of array of real;
C:array of array of real;
A:array of array of real;
B:array of array of real;
n:integer;
m:integer;
k:integer;
l:integer;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm5.Button1Click(Sender: TObject);
begin
Form1.Show;
Form5.Close;
end;
procedure TForm5.Button6Click(Sender: TObject);
var i,j,t:integer;
tmp:real;
begin
begin
n:=7;
m:=11;
setlength(C,n,m);
stringgrid3.RowCount:=n;
stringgrid3.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
C[i,j]:=cos(14*j+1);
stringgrid3.Cells[j,i]:=FormatFloat('0.00',C[i,j]);
end;
end;
begin
m:=stringgrid3.ColCount;
k:=0;
l:=10;
for i:=0 to n-1 do
begin
tmp:=C[i,k];
C[i,k]:=C[i,l];
C[i,l]:=tmp;
end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid6.Cells[j,t]:=FormatFloat('0.00',C[t,j]);
end;
begin
n:=8;
m:=15;
setlength(B,n,m);
stringgrid2.RowCount:=n;
stringgrid2.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
B[i,j]:=sin(3.2*j+4.2)+power(exp(1),tan(i));
stringgrid2.Cells[j,i]:=FormatFloat('0.00',B[i,j]);
end;
end;
begin
m:=stringgrid2.ColCount;
k:=2;
l:=4;
for i:=0 to n-1 do
begin
tmp:=B[i,k];
B[i,k]:=B[i,l];
B[i,l]:=tmp;
end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid5.Cells[j,t]:=FormatFloat('0.00',B[t,j]);
end;
begin
n:=12;
m:=9;
setlength(A,n,m);
stringgrid1.RowCount:=n;
stringgrid1.ColCount:=m;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
A[i,j]:=sin(j)/cos(j)+exp(cos(i));;
stringgrid1.Cells[j,i]:=FormatFloat('0.00',A[i,j]);
end;
end;
begin
m:=stringgrid1.ColCount;
k:=0;
l:=8;
for i:=0 to n-1 do
begin
tmp:=A[i,k];
A[i,k]:=A[i,l];
A[i,l]:=tmp;
end;
for t:=0 to n-1 do
for j:=0 to m-1 do
stringgrid4.Cells[j,t]:=FormatFloat('0.00',A[t,j]);
end;
end;
procedure TForm5.Button10Click(Sender: TObject);
var
i,j:integer;
begin
begin
for i:=0 to StringGrid6.ColCount-1 do
for j:=0 to StringGrid6.RowCount-1 do
StringGrid6.Cells[i,j]:='';
end;
begin
for i:=0 to StringGrid5.ColCount-1 do
for j:=0 to StringGrid5.RowCount-1 do
StringGrid5.Cells[i,j]:='';
end;
begin
for i:=0 to StringGrid4.ColCount-1 do
for j:=0 to StringGrid4.RowCount-1 do
StringGrid4.Cells[i,j]:='';
end;
begin
for i:=0 to StringGrid3.ColCount-1 do
for j:=0 to StringGrid3.RowCount-1 do
StringGrid3.Cells[i,j]:='';
end;
begin
for i:=0 to StringGrid2.ColCount-1 do
for j:=0 to StringGrid2.RowCount-1 do
StringGrid2.Cells[i,j]:='';
end;
begin
for i:=0 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:='';
end;
end;
end. |
|
#101
|
|||
|
|||
|
Ну, все достаточно просто.
Для указания имени файjла сипользовать TSaveDialog и TOpenDialog. Бросаешь компоненты на форму и на соотв. кнопки пишешь: procedure Form1.btSaveClick(Sender : TObject); begin If SaveDialog1.Execute Then SaveMyData(SaveDialog1.FileName); end; procedure Form1.btOpenClick(Sender : TObject); begin If OpenDialog1.Execute Then OpenMyData(OpenDialog1.FileName); end; Соотв. процедуры SaveMyData и OpenMyData сохраняют данные в файл и читают их из него, принимая на вход имя файла, полученное из диалогов. Как писать/читать свои данные разберешься? ЗЫ. По поводу сокращения кода программы. У тебя там есть нескольуо блоков кода, выполняющих одно и тоже, но с разными компонентами. Например, очистка StringGrid. Можно оформть это как отдельную процедуру, принимающую на вход компонент, и просто вызвать ее несколько раз. Код:
procedure ClearStringGrid(Grid : TStringGrid);
var
I, J : Integer;
begin
For I := 0 To Grid.ColCount-1 Do
For J := 0 To Grid.RowCount-1 Do
Grid.Cells[I,J] := '';
end;соответственно, в коде надо будет просто вызвать: Код:
procedure TForm5.Button10Click(Sender: TObject); begin ClearGrid(StringGrid1); ClearGrid(StringGrid2); ClearGrid(StringGrid3); ClearGrid(StringGrid4); ClearGrid(StringGrid5); ClearGrid(StringGrid6); end; |
|
#102
|
|||
|
|||
|
lmikle большое спасибо... но у меня толком ничего и не вышло... вот бросил я на форму SaveDialog1 - ввел на баттон 2 код
Код:
procedure TForm6.Button2Click(Sender: TObject); begin If SaveDialog1.Execute Then SaveMyData(SaveDialog1.FileName); end; И указал путь на FileName D:\Курсовая\Курсовая - Версия 1.7\Новая папка\MyResults.txt Что я не так сделал, не подскжите, выдает ошибку Undeclared identifier: 'SaveMyData' ![]() |
|
#103
|
|||
|
|||
|
Цитата:
|
|
#104
|
|||
|
|||
|
Цитата:
![]() |
|
#105
|
|||
|
|||
|
Цитата:
Сохранение stringGrid1 в файл. Код:
procedure TForm1.BitBtn2Click(Sender: TObject);
var
s :TStringlist;
j:Integer;
Str:String;
posy, posx, i : Integer;
Begin
with TSaveDialog.Create(Owner) do
begin
DefaultExt:='.txt';
Filter:= 'файлы проекта|*.txt';
if not Execute then exit;
s:=TStringList.Create;
s.Clear;
for i:=0 to StringGrid1.RowCount-1 do
begin
Str := '' ;
for j:=0 to StringGrid1.ColCount-1 do
str:=str+StringGrid1.Cells[j, i]+' ';
s.Add(Str);
end;
S.SaveToFile(FileName);
end;
s.Free;
end;Чтение данных их файла в StringGrid2 Код:
rocedure TForm1.BitBtn3Click(Sender: TObject);
var
s :TStringlist;
i,j, posy, posx: Integer;
Str:String;
Begin
with TOpenDialog.Create(Owner) do
begin
DefaultExt:='.txt';
Filter:= 'файлы проекта|*.txt';
if not Execute then exit;
s:=TStringList.Create;
S.LoadFromFile(FileName);
label2.Caption:= IntToStr(S.Count);
For posy := 1 to S.Count do
begin
posx := 0;
Str := '';
label1.Caption:= IntToStr(Length(S.Strings[posy-1]));
For i := 1 to Length(S.Strings[posy-1]) do
begin
if S.Strings[posy-1][i] <> ' ' then
Str := Str + S.Strings[posy-1][i]
else
begin
StringGrid2.Cells[posx, posy-1] := Str;
Str := '';
inc(posx);
end;
end;
end;
end;
StringGrid2.RowCount := posy;
StringGrid2.ColCount := posx;
S.Free;
end; |