Помощь новичкам

Текстовая переменная это string, переменная текстового файла это TextFile.

А вот пример с System.Windows.Forms:

{$reference System.Windows.Forms.dll}
{$reference System.Drawing.dll}

begin
  var main_form := new System.Windows.Forms.Form;
  main_form.StartPosition := System.Windows.Forms.FormStartPosition.Manual;
  main_form.Bounds := new System.Drawing.Rectangle(100,100,500,300);
  main_form.Closing += procedure(o,e)->System.Diagnostics.Process.GetCurrentProcess.Kill;
  
  
  
  var b1 := new System.Windows.Forms.Button;
  main_form.Controls.Add(b1);
  b1.Bounds := new System.Drawing.Rectangle(50,100,400,100);
  b1.Text := 'b1 text';
  b1.MouseClick += procedure(o,e)->writeln('b1 clicked');
  
  
  
  var ch_form := new System.Windows.Forms.Form;
  ch_form.StartPosition := System.Windows.Forms.FormStartPosition.Manual;
  ch_form.Bounds := new System.Drawing.Rectangle(200,400,300,200);
  ch_form.ControlBox := false;
  ch_form.Owner := main_form;
  
  
  
  var b2 := new System.Windows.Forms.Button;
  ch_form.Controls.Add(b2);
  b2.Bounds := new System.Drawing.Rectangle(50,50,200,100);
  b2.Text := 'b2 text';
  b2.MouseClick += procedure(o,e)->writeln('b2 clicked');
  
  (new System.Threading.Thread(procedure->
    System.Windows.Forms.Application.Run(main_form)
  )).Start;
  
  
  
  {
  //для последней формы не обязательно запускать новый поток, потому что дальше ничего не делается
  (new System.Threading.Thread(procedure->
    System.Windows.Forms.Application.Run(ch_form)
  )).Start;
  {}
  System.Windows.Forms.Application.Run(ch_form);
  
end.

Тут еще неприятности:

random перестал работать - невозможно преобразовать интегер к систем рандом.

и самое главное, окно появилось (когда техт поубирал) но пока его не закроешь, не запускается программа в главном графическом окне

Всегда прилагайте код программы. Никто не может угадать что и где не так пошло.

а понял, поменял Text на TextFile, заработало и файл создается.

прога у меня большая очень уже.

просто в начале программы вставил "

f := new Form;

btn := new Button;

btn.Text := ‘Click me’;

btn.Click += ButtonClick;

f.Controls.Add(btn);

Application.Run(f);

" пока окно не закрою, я так понимаю висит в окне, а мне нужно чтоб оно одновременно работало.

Эх, давайте я ещё раз объясню…

Выделять код правильно так:

```

begin

end.

```

Превращается в:

begin
  
end.

При чём на строчках с ``` больше ничего не должно быть, иначе их глючит.

А теперь вы мне объясните, что именно имели в виду, потому что я ничего не понял.

1 лайк

Спасибо за Ваше терпение, не судите строго, последний раз программировал под комп лет 10 назад :slight_smile:

Суть в том, что запускаются окна, графическое и то что прописал с кнопкой. Так вот пока не закрою то что с кнопкой, в графическом программа остановлена.

как я понимаю после строки -

Application.Run(f); 

программа работает только в 2м окне.

Ну я же так и написал в своей программе. Там закомментирован запуск потока для второй формы потому что это последнее в коде программы. Когда вызывается Application.Run - он отдаёт целый вызвавший поток запускаемой апликации. Запускайте в отдельном потоке, чтоб не основной отдавало форме.

1 лайк

убрал строчку

System.Windows.Forms.Application.Run(ch_form);

заработало :slight_smile: теперь у меня 2 окна, одно из них графическое, запускаются в одной программе. Спасибо большое :slight_smile:

Её вообще не убрать надо было а занести в отдельный поток… Но моя программа создаёт 2 не_графических окна, если вам второе не нужно - уберите всё связанное с ch_from и b2.

1 лайк

не получается задать начальное расположение окон на экране, размер окон понял как менять, а вот где им сразу находиться ну никак :frowning:

Смотрите как я поставил у первого окна в моей программе:

  main_form.StartPosition := System.Windows.Forms.FormStartPosition.Manual;
  main_form.Bounds := new System.Drawing.Rectangle(100,100,500,300);

То есть надо указать позицию и размер через Bounds (вообще есть ещё полно других свойств, позволяющих указывать отдельно, но Bounds это всё вместе). Но ещё надо не забыть поставить StartPosition на FormStartPosition.Manual, иначе позиция будет перезаписана, на значение по умолчанию для вашей винды, когда форма стартует. Кстати не важно в каком порядке их ставить, главное оба до старта формы.

1 лайк

С дополнительным окном все получилось :slight_smile:

А с графическим не понятно, Там так прописано:

  window.Caption := 'название';
  SetWindowSize(800, 640);
  window.IsFixedSize := true;
  LockDrawing;

далее идет тело программы.

Что-то не получается. Пытался что-то втулить - Выдает ошибки такое-то не объявлено в граф абс виндовс

Ещё раз, давайте текст программы, а не слабое описание ошибки. Прикрепите файлом, что ли. Архивом если много файлов.

разобрался, в GraphABC положение окна прописывается так - SetWindowPos(0,0);

Как разбить программу на несколько кусков? чтоб были в разных файлах. Но переменные были связаны.

Блин что-то не соображу.

Т.е. программа у меня раздулась не удобно по ней перемещаться. Есть несколько блоков А Б С Нужно чтоб была главная. и блоки эти.

Как правильно прописать?

Главный блок оставить где есть, а дополнительные разнести на модули. Ищите в справке как делать модули.

1 лайк

мдаа… если честно сделано неудобно. Можно было бы по проще что нибудь придумать. типа:

 call блок1 

создаем файл паскаля типа

Блок 1
бегин 
......
энд
return

чтоб всякий мусор лишний не писать.

придется все в 1м файле писать, не понравились мне модули так как они реализованы.

У нас есть русская версия с ключевыми словами

бегин

энд
2 лайка

это шутка? :slight_smile: просто шрифт не охота было переключать :))) и так же понятно думаю.

Ещё есть регионы, кстати:

{$region My First Region}

{$endregion My First Region}

Но они не будут работать пока в настройках не включите сворачивание кода. Оно почему то по умолчанию выкл)).

1 лайк