|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#91
|
|||
|
|||
У меня снова вопрос - как можно удалить ненужную форму?
|
#92
|
||||
|
||||
Project - Remove From Project
Что делать, когда сломался комп: 1. Если вы юзер - делать ноги. 2. Если ремонтник - делать деньги. 3. Если вы программист - делать вид, что так было задумано. |
#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; |