Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2015, 15:21   #1
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию Показать/отметить правильный ответ в тесте.

Помогите, как с помощью горячей клавиши показать отметить верный ответ в тесте. У меня вот есть код в котором динамически формируется закладки в Pagecontrol. В каждой закладке динамически формируются поле для вопроса в виде Richedit и ответы в виде MEMO. Также есть процедура клика мыши и отжатия клавиши мыши. В этих процедурах производится отметка ответа цветом в зависимости от правильности. Все четко работает, но вот не получается сделать так чтобы при нажатии клавиши к примеру F1 подсвечивался цветом правильный ответ.

Код:
procedure TMainF.NOnClick(Sender: TObject);
var i:integer;
    vop_id, otv_id: integer;
begin
     vop_id:=NameToId(TMemo(Sender).Name, 'Memo', False);
    otv_id:=NameToId(TMemo(Sender).Name, 'Memo', True);
       if TMemo(Sender).Color = clBtnFace then begin
      //Делаем возможным выбор только одного варианта
        Voprosy[vop_id].user[otv_id]:=True;
        if Voprosy[vop_id].right[otv_id]=True then
          NMemo[vop_id][otv_id].Color := clLime
        else
          NMemo[vop_id][otv_id].Color := clRed;
         Voprosy[vop_id].count:=Voprosy[vop_id].count+1;
    end
    else begin
        Voprosy[vop_id].user[otv_id]:=False;
        NMemo[vop_id][otv_id].Color := clBtnFace;
        Voprosy[vop_id].count:=Voprosy[vop_id].count-1;
    end;
    if SetupF.CheckBox1.Checked=True then
      MainF.ToolButton2.Click
    else
      MainF.ToolButton2.Enabled:=True;
end;

////////////////////////////////////////////////
// Реакция на отпускание мышки над ответом
////////////////////////////////////////////////
procedure TMainF.NOnMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i:integer;
    vop_id, otv_id: integer;
begin
    vop_id:=NameToId(TMemo(Sender).Name, 'Memo', False);
    otv_id:=NameToId(TMemo(Sender).Name, 'Memo', True);
   
     if TMemo(Sender).Color = clBtnFace then begin
      //Делаем возможным выбор только одного варианта
        Voprosy[vop_id].user[otv_id]:=True;
        if Voprosy[vop_id].right[otv_id]=True then
          NMemo[vop_id][otv_id].Color := clLime
        else
          NMemo[vop_id][otv_id].Color := clRed;
         Voprosy[vop_id].count:=Voprosy[vop_id].count+1;
    end
    else begin
        Voprosy[vop_id].user[otv_id]:=False;
        NMemo[vop_id][otv_id].Color := clBtnFace;
        Voprosy[vop_id].count:=Voprosy[vop_id].count-1;
    end;
    if SetupF.CheckBox1.Checked=True then
      MainF.ToolButton2.Click
    else
      MainF.ToolButton2.Enabled:=True;
   
      NMemo[vop_id][otv_id].SelStart:=Length(NMemo[vop_id][otv_id].Text); 
end;
]


Код:
////////////////////////////////////////////////
// Динамическое создание закладок
////////////////////////////////////////////////

procedure TMainF.Creator(Sender: TObject; N:integer);
var i: integer;
begin
  SetLength(NTabSheet, N);
  SetLength(NButton, N);
  SetLength(NRichEdit, N);
  SetLength(NMemo, N);
  for i:=0 to N-1 do begin
  	NTabSheet[i]:=TTabSheet.Create(MainF.PageControl1);
  	NTabSheet[i].Name:='TabSheet'+IntToStr(i);
  	NTabSheet[i].Caption:='Вопрос'+IntToStr(i+1);
    NTabSheet[i].Visible:=True;
    NTabSheet[i].TabVisible:=True;
    NTabSheet[i].Enabled:=True;
   	NTabSheet[i].Parent:=MainF.PageControl1;
    NTabSheet[i].PageControl:=MainF.PageControl1;
     	NRichEdit[i]:=TRichEdit.Create(NTabSheet[i]);
  	NRichEdit[i].Top:= 0;
  	NRichEdit[i].Left:= 0;
  	NRichEdit[i].Width:= 400;
    NRichEdit[i].BorderWidth:=5;
  	NRichEdit[i].Height:=round(NTabSheet[i].Height/5);
  	NRichEdit[i].Name:='N_'+IntToStr(i);
  	NRichEdit[i].Align:= alTop;

    NRichEdit[i].Font:=AboutF.Label4.Font;
  	NRichEdit[i].Parent:=NTabSheet[i];
  end;
  MainF.PageControl1.ActivePageIndex:=i-1;
  MainF.PageControl1.ActivePageIndex:=0;

end;
Scorpuha вне форума Ответить с цитированием
Старый 19.11.2015, 15:21   #2
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Код:
Код:
procedure TMainF.ToolButton1Click(Sender: TObject);
var i: integer;
    j: integer;
    v: integer;
    o: integer;
    vnum, rnum: array of integer;
begin
mainf.N3.Enabled:=false;
mainF.ToolButton1.Enabled:=false;
  if  vyborgruppyF.ComboBox1.Text='2' then
  begin
  cycle:=0;
  j:=StrToInt(setupF.EditEV.Text);
  Creator(Sender, j);
  //Количесвто вопросов в базе
  LoadF.ADOQuery1.SQL.Clear;
  LoadF.ADOQuery1.SQL.Add('SELECT COUNT(*) AS v FROM voprosy2');
  LoadF.ADOQuery1.Active:=True;
  v:=LoadF.ADOQuery1.FieldByName('v').AsInteger;
  //Задаем размер массива идентификаторов
 if v>0 then begin
  SetLength(vnum, v);
  //Выбираем все идентификаторы
  LoadF.ADOQuery1.SQL.Clear;
  LoadF.ADOQuery1.SQL.Add('SELECT vopros_id FROM voprosy2');
  LoadF.ADOQuery1.Active:=True;
  LoadF.ADOQuery1.First;
  for i:=0 to v-1 do begin
    vnum[i]:=LoadF.ADOQuery1.FieldByName('vopros_id').AsInteger;
    LoadF.ADOQuery1.Next;
  end;
  for i:=0 to j-1 do begin
    SetLength(rnum, i+1);
    SetLength(Voprosy, i+1);
    rnum[i]:=Randomator(rnum, v);
    LoadF.ADOQuery1.SQL.Clear;
    LoadF.ADOQuery1.SQL.Add('SELECT *');
    LoadF.ADOQuery1.SQL.Add('FROM otvety2 AS o INNER JOIN (voprosy2 AS v LEFT JOIN documents AS 
                  d ON d.document_id=v.document_id) ON o.vopros_id=v.vopros_id');
    LoadF.ADOQuery1.SQL.Add('WHERE v.vopros_id = '+IntToStr(vnum[rnum[i]]));
    LoadF.ADOQuery1.Active:=True;
    LoadF.ADOQuery1.First;
    NRichEdit[i].Text:=LoadF.ADOQuery1.FieldByName('v.text').AsString;
    Nrichedit[i].ReadOnly:=true;
    o:=0;
    while not LoadF.ADOQuery1.Eof
    do begin
	    // Создаем НОВЫЙ экземпляр класса Label
      //ShowMessage(IntToStr(i)+' '+NTabSheet[i].Name);
      SetLength(NMemo[i], o+1);
      SetLength(Voprosy[i].right, o+1);
      SetLength(Voprosy[i].user, o+1);
      //Заносим ссылку литературу
      Voprosy[i].document:=LoadF.ADOQuery1.FieldByName('doc_title').AsString+' '
                 +LoadF.ADOQuery1.FieldByName('ssylka').AsString+' ('+LoadF.ADOQuery1.FieldByName('doc_text').AsString+').';

      NMemo[i][o]:=TRichEdit.Create(NTabSheet[i]);
	    NMemo[i][o].Top:= round(NTabSheet[i].Height/2)+o*40;
	    NMemo[i][o].Left:= 0;
      NMemo[i][o].Cursor:=crHandPoint;
      NMemo[i][o].BorderStyle:=bsNone;
      NMemo[i][o].BevelInner:=bvRaised;
      NMemo[i][o].BevelKind:=bkTile;
      NMemo[i][o].ParentColor:=True;
 	    NMemo[i][o].ScrollBars:=ssVertical;
      NMemo[i][o].WantTabs:=True;
      NMemo[i][o].WantReturns:=True;
 	    NMemo[i][o].WordWrap:=True;
      NMemo[i][o].ReadOnly:=True;
      NMemo[i][o].Align:= alTop;
	    NMemo[i][o].Width:= NTabSheet[i].Width;
	    NMemo[i][o].Height:= 21+15;
      NMemo[i][o].BorderWidth:=5;
 	    NMemo[i][o].Font:=AboutF.Label6.Font;
	    NMemo[i][o].Name:='Memo'+IntToStr(i)+'_'+IntToStr(o);
	    NMemo[i][o].Parent:=NTabSheet[i];
     
      NMemo[i][o].OnMouseUp:=NOnMouseUp;
      NMemo[i][o].Clear;
      NMemo[i][o].Text:=IntToStr(o+1)+'. '+LoadF.ADOQuery1.FieldByName('o.text').AsString;
      //NMemo[i][o].Lines.Add(IntToStr(o+1)+'. '+LoadF.ADOQuery1.FieldByName('o.text').AsString);
      if(Length(NMemo[i][o].Lines.Text)>85) then NMemo[i][o].Height:=Ceil(NMemo[i][o].Lines.Count)*18+10;
      if LoadF.ADOQuery1.FieldByName('pravilno').AsBoolean = True then begin
        NMemo[i][o].Tag:=1;
        Voprosy[i].right[o]:=True;
        Voprosy[i].user[o]:=False;
      end
      else NMemo[i][o].Tag:=0;
      LoadF.ADOQuery1.Next;
      o:=o+1;
    end;
  end;
end;

Последний раз редактировалось Stilet; 21.11.2015 в 17:19.
Scorpuha вне форума Ответить с цитированием
Старый 21.11.2015, 15:28   #3
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

А мне кто нибудь поможет? ��
Scorpuha вне форума Ответить с цитированием
Старый 21.11.2015, 17:21   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при нажатии клавиши к примеру F1 подсвечивался цветом правильный ответ.
А как ты пробовал? Или клавишу совсем не пробовал задействовать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2015, 20:49   #5
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

Пробовал через актион лист и хот кей. Не получается. Клавиши знать получается без проблем, а вот применить к моему вопросу не получается
Scorpuha вне форума Ответить с цитированием
Старый 21.11.2015, 21:05   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так а как пробовал то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.11.2015, 13:17   #7
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

пробовал через процедуру KeyPress и AdoQuery который используется в процедуре TMainF.ToolButton1Click. и естественно не получается. Как правильно не знаю. Подсобите? Если в этот код добавить строку, красным выделено, то правильный ответ отмечается цветом сразу при отработке процедуры.

Код:
if LoadF.ADOQuery1.FieldByName('pravilno').AsBoolean = True then begin
NMemo[i][o].Color:=clblue;
        NMemo[i][o].Tag:=1;
        Voprosy[i].right[o]:=True;
        Voprosy[i].user[o]:=False;
      end
Scorpuha вне форума Ответить с цитированием
Старый 25.11.2015, 12:46   #8
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

добавил проект, может кто посмотрит
Вложения
Тип файла: rar project.part01.rar (488.3 Кб, 9 просмотров)
Тип файла: rar project.part02.rar (488.3 Кб, 9 просмотров)
Тип файла: rar project.part03.rar (387.5 Кб, 9 просмотров)
Scorpuha вне форума Ответить с цитированием
Старый 25.11.2015, 13:12   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ужс... Не пойму я как у тебя различаются Мемо с правильным ответом и остальные...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.11.2015, 15:07   #10
Scorpuha
Форумчанин
 
Регистрация: 10.10.2013
Сообщений: 177
По умолчанию

К сожалению тоже не совсем понимаю, тк доделываю проект за другим программистом
Scorpuha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
какой ответ правильный? contor Windows 1 04.01.2014 16:13
Скажите каким образом в этой программе тестирования определяется правильный ответ и как к нему создавать список вопросов? Ольга1234 Windows Forms 1 07.06.2013 06:53
Как отметить совпадения hloppel Microsoft Office Excel 6 28.10.2010 09:45
C++. в зависимости от проверки элемента на равенство должен выводится правильный ответ phantom4eg Помощь студентам 9 24.05.2010 22:41
Файл, выводит не правильный ответ. Telec Общие вопросы C/C++ 7 11.05.2010 19:30