![]()  | 
	
 
  | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вот состряпал такой тестик http://depositfiles.com/files/61uc3ah6u, спасибо dr. F.I.N. и AleD. 
		
	
		
		
		
		
		
	
		
		
	
	
	Но вот есть 2 загвоздки: -в форме тестирования(Unit3) не знаю как сделать так, чтобы кнопки (т.е. соответствия) менялись местами(желательно рандомно)? -как сделать так чтобы при выходе все параметры сохранялись(т.е, например, изменил я через форму вопросы и ответы, а после перезахода они снова становятся такими, как до изменения)? -соответствия(они же кнопки в Unit3) по двойному клику исчезают, т.к. их Теги равны самому себе и т.д., кае убрать это исчезновени по даблклику? Люди, помогите пожалуйста. Заранее спасибо!  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Вот процедура: Подаешь ей координату Y, с которой начинают располагаться объекты (координата X не меняется), подаешь отступ (offset) - расстояние между координатами Y двух соседних объектов, и список (TList) наполненный объектами, которые необходимо рандомно раскидать по вертикали. Не забудь указать в файе .DPR RandomIze. Написано на коленке, но работь должно. Код: 
	procedure ShowRandom(StartTop, Offset: Integer; ObjList: TList);
var
  x, i: Integer;
  tempList: TList;
begin
  if ObjList.Count = 0 then Exit;
  tempList := TList.Create;
  tempList.Assign(ObjList);
  x := StartTop;
  while tempList.Count > 0 do
  begin
    i := Random(tempList.Count);
    TControl(tempList.Items[i]).Top := x;
    Inc(x, Offset);
    tempList.Delete(i);
  end;
  tempList.Free;
end; | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Вариантов уйма: 1) БД 2) INI-файл 3) Текстовый файл 4) Свой формат файла 5) 2+3+4 + Шифрация  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Код: 
	procedure TF_Test.Button1Click(Sender: TObject);
begin
if SecondClick then
begin
  if (LastButton.Tag = TButton(Sender).Tag) and (LastButton <> TButton(Sender))
  then
  begin
    LastButton.Hide;
    TButton(Sender).Hide;
    Inc(c);
    Inc(r);
    If r=1 then
       BitBtn1.Visible:=true;
  end
  else
   begin
    Inc(e);
    ShowMessage('Не верно');
    str(e,et);
    label1.caption:=et;
  end;
  SecondClick := false;
end
else
begin
  LastButton := TButton(Sender);
  SecondClick := true;
end;Кстати, я об этом предупреждал ![]() Цитата: 
	
 Последний раз редактировалось dr. F.I.N., 04.06.2010 в 08:18.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Большое спасибо! 
		
	
		
		
		
		
		
	
		
		
	
	
	Но вот в первом коде выдаёт ошибку "Undeclared identifier Assign" чем обозначить Assign? или я что-то не правильно делаю?  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 переустановил Дельфи. Вот вроде теперь ошибку не выдаёт, но не работает. Либо я опять делаю что-то не верно...  | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Код: 
	object Form1: TForm1
  Left = 192
  Top = 107
  Width = 360
  Height = 191
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 80
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
  end
  object Button2: TButton
    Left = 64
    Top = 56
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
  end
  object Button3: TButton
    Left = 48
    Top = 88
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 2
  end
  object Button4: TButton
    Left = 32
    Top = 120
    Width = 75
    Height = 25
    Caption = 'Button4'
    TabOrder = 3
  end
  object Button5: TButton
    Left = 208
    Top = 120
    Width = 123
    Height = 25
    Caption = 'Зарандомить :)'
    TabOrder = 4
    OnClick = Button5Click
  end
endКод: 
	unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure ShowRandom(StartTop, Offset: Integer; ObjList: TList);
var
  x, i: Integer;
  tempList: TList;
begin
  if ObjList.Count = 0 then Exit;
  tempList := TList.Create;
  tempList.Assign(ObjList);
  x := StartTop;
  while tempList.Count > 0 do
  begin
    i := Random(tempList.Count);
    TControl(tempList.Items[i]).Top := x;
    Inc(x, Offset);
    tempList.Delete(i);
  end;
  tempList.Free;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
  Lst: TList;
begin
  Lst := TList.Create;
  Lst.Add(Button1);
  Lst.Add(Button2);
  Lst.Add(Button3);
  Lst.Add(Button4);
  ShowRandom(24, 32, Lst);
  Lst.Clear;
  Lst.Free;
end;
end. | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 ага. спасибо! разобрался я, как эта штука работает. а она только по Х координатам умеет?  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Ну как бы всмотрись в код внимательно  
		
	
		
		
		
		
		
		
			  Не по X, а по Y. А переделать под свои нужды - дело минутное. Ты же спросил как рандомно раскидать, я рандомно раскидал Конретики же не было как надо ![]() Код: 
	procedure ShowRandom(StartTop, StartLeft, OffsetY, OffsetX: Integer; ObjList: TList);
var
  x,y,  i: Integer;
  tempList: TList;
begin
  if ObjList.Count = 0 then Exit;
  tempList := TList.Create;
  tempList.Assign(ObjList);
  x := StartLeft;
  y := StartTop;
  while tempList.Count > 0 do
  begin
    i := Random(tempList.Count);
    TControl(tempList.Items[i]).Left := x;
    TControl(tempList.Items[i]).Top := y;
    Inc(x, OffsetX);
    Inc(y, OffsetY);
    tempList.Delete(i);
  end;
  tempList.Free;
end;Теперь и по х и по y раскидывает. Последний раз редактировалось dr. F.I.N., 05.06.2010 в 13:37.  | 
| 
		 
			 
			#11  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 отоночё) ну, спасибо огромное! прям выручили школоло) спасибо ещё раз)  |