Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 03.04.2008, 18:40
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Не должно быть никаких ограничений. А какие проблемы?
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #17  
Старый 03.04.2008, 19:34
ariane ariane вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 17
Репутация: 10
По умолчанию

Извините за беспокойство!) Это был глюк моей дельфи.
Но вопрос остался открытым:
А вообще существуют более удобные способы связать всю программу воедино (за исключением hide-show)? Например объединить два-три проекта под общей оболочкой, как подпрограммы?
Ответить с цитированием
  #18  
Старый 03.04.2008, 19:51
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

В Delphi для этого есть Project group. Он создается когда вы создаете свой проект, просто обычно группа состоит из одного проекта :-)
По-поводу связки форм, не проще использовать PageControl?
Ответить с цитированием
  #19  
Старый 03.04.2008, 20:06
ariane ariane вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 17
Репутация: 10
По умолчанию

Можно немножко поподробнее о PageControl?
Ответить с цитированием
  #20  
Старый 04.04.2008, 10:30
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

Компонент PageControl (Закладка Win32).
Компонент имеет в себе набор страниц (TabSheet), на которых собственно можете размещать содержимое, которое вы размещали на формах. Переключение производится либо в виде закладок, либо программно. Практически любой стандартный Windows-визард создан с помощью его. Есго также можете увидет в свойствах экрана (закладки наверху). Наименования закладок можно скрыть(TabSheet1.TabVisible), тогда придется переключатся с помощью:
1. PageControl.ActivePageIndex (индексы естественно начинаются с 0)
2. PageControl.ActivePage := TabSheet1;
3. PageControl.Pages[0].TabVisible := true;
Вообщем компонент стандартный начиная с Win95 (в Win 3.0 тоже был :-) но назывался по другому) поэтому доступен и через WinAPI.

В целом это контейнер содержащий в себе диалоговые окна.
Ответить с цитированием
  #21  
Старый 08.04.2008, 17:10
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
Смех

А еще есть такая вещь как MDI интерфейс
Читайте сейчас в любом учебнике по Delphi!
Ответить с цитированием
  #22  
Старый 15.04.2008, 09:17
ariane ariane вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 17
Репутация: 10
По умолчанию

Всем большое спасибо за оперативные и правильные советы! :-)
Разрешите задать Вам вопрос. Есть две связанных формы Form1 и Form2 ( то есть, на form1 есть Button1, открывающая Form2). На Form2 расположена Button2. Как сделать так, чтобы при нажатии на Button2 заново выполнялась программа, написанная в Form2?
я сделала так:

Код HTML:
в Unit2: procedure TForm2.Button2Click (Sender: TObject); begin form2.close; form1.show; end; в Unit1: procedure TForm2.Button1Click (Sender: TObject); begin form1.hide; form2.show; end;
Но так при повторном открытии в form2 показывается результат работы Unit2 (например, уже пройденный тест).
Ответить с цитированием
  #23  
Старый 15.04.2008, 09:38
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Смотря в какой процедуре Form2 эта программа написана.
Для Вашего случая можно записать код в событие формы Form2 OnActivate
Ответить с цитированием
  #24  
Старый 15.04.2008, 11:10
ariane ariane вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 17
Репутация: 10
По умолчанию

про такую процедуру слышала, но, как её применять, к сожалению, не знаю.
Прилагаю проект.
Прямо по процедурам сказать вряд ли что смогу, так как на Дельфи работаю не больше месяца, и программа не мной написана. Не подскажите, как тут можно организовать повторный запуск?

Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
           uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
 form1.Hide;
 form2.show;
end;
end.


unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Tabs, Buttons, OleServer, StdCtrls,
  ComCtrls, ExtCtrls,   jpeg;
type
  TForm2 = class(TForm)
    Panel3: TPanel;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    Button1: TButton;
    Label2: TLabel;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
    type
    ttst=record
    ask:string;
    one:string;
    two:string;
    three:string;
    ans:integer;
    subject:string;
    end;   
var
  Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
const
max=5;
var
bal:integer;
TstWord,Tst:array[1..max] of ttst;
countY,countN:integer;
   countT:integer;
indx:array[1..max]of integer;
mas:array[1..max]of string;
i:integer;
procedure CreateIndx; //  задаем случайным образом вывод вопросов
var
  rnd1,rnd2,i,z:integer;
begin
  randomize;
  for i:=1 to max do
      Indx[i]:=i;
  i:=1000000;
  while 0<i do begin
    rnd1:=random(max-1)+1;
    rnd2:=random(max-1)+1;
    z:=Indx[rnd1];
    Indx[rnd1]:=Indx[rnd2];
    Indx[rnd2]:=z;
    dec(i);
  end;
end;
procedure CreateTestWord;
begin
    with TSTword[1] do begin
ask:='При растяжении';
one:='85';
two:='85,045';
three:='85,988';
ans:=1;
end;
 with tstword[2] do begin
ask:='При растяжении в';
one:='85,00074879';
two:='85,04532314 ';
three:='85,09030112';
ans:=2;
end;
with tstword[3] do begin
ask:='При растяже';
one:='85,00074879';
two:='85,04532314 ';
three:='85,09030112';
ans:=3;
end;
with tstword[4] do begin
ask:='При растяжении волокн';
one:='85,00074879';
two:='85,04532314 ';
three:='85,09030112';
ans:=3;
end;
with tstword[5] do begin
ask:='При растяжении волокна с n';
one:='85,00074879';
two:='85,04532314 ';
three:='85,09030112';
ans:=3;
end;
end;
procedure PrintAsk(i:integer);
begin
 with form2 do begin
   Memo1.Text:='Задача:    '+Tst[i].Ask;
   RadioButton1.Caption:=Tst[i].one;
   RadioButton2.Caption:=Tst[i].Two;
   RadioButton3.Caption:=Tst[i].three;
 end;
   end;
  procedure TForm2.FormCreate(Sender: TObject);
begin
form2.Color:=rgb(236,233,216);
bal:=0;
 CountY:=0;
   CountN:=0;
   CountT:=1;
   i:=1;
   CreateIndx;
   CreateTestWord;
   Tst:=TstWord;
   PrintAsk(Indx[CountT]);
   label2.caption:='Задача 1';
   end;
 procedure TForm2.Button1Click(Sender: TObject);
   var
  mark:string; 

  function FindMas(A:string):boolean;
  var
    k:integer;
  begin
    FindMas:=false;
    for k:=1 to i do
        if Mas[k]=A then begin
           FindMas:=true;
           break;
        end;
  end;

begin
        with Tst[Indx[CountT]] do begin
        if RadioButton1.Checked and (ans=1) then inc(CountY)
        else if RadioButton2.Checked and (ans=2) then inc(CountY)
        else if RadioButton3.Checked and (ans=3) then inc(CountY)
        else begin
           inc(CountN);
           if not FindMas(subject) then begin
               mas[i]:=subject;
              inc(i);
             end;
        end;
       label2.Caption:='Задача '+inttostr(CountT+1);
       inc(CountT);
         if countT=4 then begin
        label2.Caption:='Задача 3';
        button1.Enabled:=false;
        bal:=1;
          if CountY=3 then
           begin
           Button3.Show;
           mark:='Отлично'; end
          else if CountY>=2 then
           begin
           Button3.Show;
           mark:='Хорошо';end
          else if CountY>=1 then
          begin
          Button2.Show;
          mark:='Удовлетворительно'; end
          else begin mark:='Плохо! Решите правильно хотя бы 2 задачи';
          Button2.Show;
          bal:=0;
          end;
         showmessage('Правильно решено = '+inttostr(CountY)+#13+
         'Неправильно решено = '+inttostr(CountN)+ #13+#13+
         '                    Оценка: '+mark);
      end else begin
        RadioButton1.Checked:=false;
        RadioButton2.Checked:=false;
        RadioButton3.Checked:=false;
        PrintAsk(Indx[CountT]); end;
     end;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 form2.close;
 form1.Show;
end;
end.
Ответить с цитированием
  #25  
Старый 15.04.2008, 19:59
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

У вас запуск теста осуществляется в событии формы OnCreate. Лучше всего создать новую внутреннюю процедуру, и назвать напрмер TestBegin.
В эту процедуру скинуть текст кода из процедуры OnCreate. А в событии OnClick кнопки на первой форме вызывать эту процедуру (TestButton).
А для начала я бы предложил весь код аккуратно пробелами выравнять. А то уж больно трудно понять что к чему.
Ответить с цитированием
  #26  
Старый 16.04.2008, 11:35
ariane ariane вне форума
Прохожий
 
Регистрация: 24.03.2008
Сообщения: 17
Репутация: 10
По умолчанию

MegaPiha, тут переправить пробелы не получилось, но приложила сам проект. Без OnCreate программа отказывается работать
Вложения
Тип файла: zip POVTOR.zip (11.9 Кбайт, 1 просмотров)
Ответить с цитированием
  #27  
Старый 16.04.2008, 12:07
MegaPiha MegaPiha вне форума
Активный
 
Регистрация: 24.03.2008
Сообщения: 227
Версия Delphi: Delphi 7
Репутация: 30
По умолчанию

Цитата:
Сообщение от ariane
MegaPiha, тут переправить пробелы не получилось, но приложила сам проект. Без OnCreate программа отказывается работать
Я вам вот о чем писал.
Вложения
Тип файла: zip Povtor.zip (14.8 Кбайт, 2 просмотров)
Ответить с цитированием
  #28  
Старый 16.04.2008, 14:27
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

может неактуально уже, но можно же вызывать обработчик OnCreate (как и любой другой) как процедуру...
в коде кнопки что-то типа form2.OnCreate(Sender); вместо закрыть/показать
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter