|
#1
|
|||
|
|||
Memo +
При нажатии на button1 получается результат в memo:
| 1 | 2 | 3 | 4 | 5 | 6 а нужно так: | 1 | 4 | 2 | 5 | 3 | 6 Как сделать?) Код:
private Edits:array[1..3,1..1] of TEdit; Edits2:array[1..3,1..1] of TEdit; Results:array[1..3,1..1] of integer; Results2:array[1..3,1..1] of integer; public ... end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); const StartIndex:array[1..3]of integer=(1,2,3); StartIndex2:array[1..3]of integer=(4,5,6); var i,j, i2,j2: Integer; begin for i:=1 to 3 do for j:=1 to 1 do Edits[i,j]:=TEdit(FindComponent('Edit'+Inttostr((StartIndex[i]+j-1)))); for i2:=1 to 3 do for j2:=1 to 1 do Edits2[i2,j2]:=TEdit(FindComponent('Edit'+Inttostr((StartIndex2[i2]+j2-1)))); end; procedure TForm1.Button1Click(Sender: TObject); var i, j, i2, j2: Integer; StrResult, StrResult2, s, s2 : String; begin Label1.Caption := '1'; Button2Click(nil); StrResult := ''; StrResult2 := ''; //-------------- for j := 1 to 3 do begin s := ''; for i := 1 to 1 do s := s + ' | ' + IntToStr(Results[j, i]); StrResult := StrResult + s + #13#10; end; for i := 1 to 3 do for j := 1 to 1 do Results[i, j] := 0; //-------------- for j2 := 1 to 3 do begin s2 := ''; for i2 := 1 to 1 do s2 := s2 + ' | ' + IntToStr(Results2[j2, i2]) + ' | ' + IntToStr(Results[j, i]); StrResult2 := StrResult2 + s2 + #13#10; end; for i2 := 1 to 3 do for j2 := 1 to 1 do Results2[i2, j2] := 0; //-------------- Memo1.Lines.Text := StrResult2; //Memo2.Lines.Text := ; end; procedure TForm1.Button2Click(Sender: TObject); var i,j, i2,j2: Integer; begin Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+1); for i:=1 to 3 do begin for j:=1 to 1 do begin inc(Results[i,j],StrToIntDef(Edits[i,j].Text,0)); Edits[i,j].Text:='0'; end; end; for i2:=1 to 3 do begin for j2:=1 to 1 do begin inc(Results2[i2,j2],StrToIntDef(Edits2[i2,j2].Text,0)); Edits2[i2,j2].Text:='0'; end; end; end; |
#2
|
|||
|
|||
Код:
const S : String = '123456'; var I : Integer; Buf : String; begin For I := 1 To Length(S) div 2 Do Begin Buf := '|' + S[i]; If I*2 <= Length(S) Then Buf := Buf + '|' + S[I*2]; Memo1.Lines.Add(Buf); End; end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
GrabbeR (25.02.2014)
|
#3
|
||||
|
||||
Если принципиально использование массива, то тогда вот
Код:
... // Memo1: TMemo; // Button1: TButton; // Edit1: TEdit; ... procedure TForm1.Button1Click(Sender: TObject); var i, cnt: integer; arr: array of string; //integer; s: string; begin // Edit1.Text:= '1 2 3 4 5 6'; cnt:= 0; // кол-во чисел в строке for i := 1 to Length(Edit1.Text) do if Edit1.Text[i] = ' ' then Inc(cnt); // инициализация массива SetLength(arr, cnt+1); s:= ''; cnt:= 0; // заполнение массива for i:= 1 to Length(Edit1.Text) do begin if Edit1.Text[i] <> ' ' then s:= s + Edit1.Text[i]; if (Edit1.Text[i] = ' ') or (i = Length(Edit1.Text)) then begin arr[cnt]:= s; //StrToInt(s); s:= ''; Inc(cnt); end; end; {for i} // определяем кол-во строк в Memo1 cnt:= Length(arr) div 2; if Length(arr) mod 2 > 0 then Inc(cnt); // не четный ряд Memo1.Clear; // и собсно сам лисапет с заполнением Memo for i := 0 to cnt-1 do begin // элемент первого столбца s:= '| ' + arr[i];//IntToStr(arr[i]); // элемент колонки 2 if i * 2 < Length(arr)-1 then s:= s + ' | ' + arr[cnt+i] //IntToStr(arr[i]) else s:= s + ' | '; // пустышка на случай нечётного размера Memo1.Lines.Add(s); end; {for i} end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
GrabbeR (25.02.2014)
|
#4
|
|||
|
|||
Спасибо, помогли разобраться следующим способом:
Код:
Memo1.Clear; for i:=1 to 3 do begin Memo1.Lines.Add(Format(' | %d | %d',[Results[i,1],Results2[i,1]])); Results[i,1]:=0; Results2[i,1]:=0; end; |
#5
|
|||
|
|||
Народ, там есть куда более простое решение!
|
#6
|
|||
|
|||
Цитата:
|
#7
|
||||
|
||||
Оффтоп:
Не подскажет, от "любителя покодить", что даже в своей теме не сподобился и строчки кода набросать, такого ждать вряд ли приходится Я не понял Вашего вопроса, но всё же Вам на него отвечу! |