Форум программистов, компьютерный форум, киберфорум
Наши страницы

PascalABC.NET

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 5, средняя оценка - 5.00
BaboshinSD
334 / 273 / 28
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
#1

Полезные коды для PascalABC.NET - PascalABC.NET

23.03.2013, 15:03. Просмотров 175742. Ответов 120

В этой теме размещаются полезные исходники программ, различные процедуры и функции, а так же готовые решения на часто задаваемые вопросы, написанные на PascalABC.NET.

Поддержать тему и добавить свои примеры, исходники и пр. может каждый, после того, как ознакомиться с правилами темы:
Правила темы!
  1. Запрещается добавлять коды программ никак не связанные с PascalABC.NET, для этих программ есть другие темы и разделы.
  2. Не рекомендуется добавлять слишком простые примеры, типа "Как добавить текст на кнопку?" и пр.
  3. Перед тем как выложить код, подумайте будет ли он кому-то интересен или полезен.
  4. Приветствуются сложные примеры или проекты, а так же программы с интересным принципом работы.
  5. Если программа использует сторонние ресурсы (изображения, библиотеки и пр.) обязательно прикрепляйте их во вложении
  6. Обязательно подробно комментируйте свой код, чтобы другим было проще разобраться в нём.
  7. Тема ведётся в формате Вопрос-Ответ, поэтому все сообщения оформляются в таком виде:
    В: Как что-то сделать?
    О:
    Делаем что-то
    Pascal
    1
    
    // Тут код
  8. Если вы хотите отредактировать свой код, можно обратиться к модераторам раздела или к ТС.


Путеводитель по теме:


Работа с формами:

Готовые решения:
Готовые решения на часто задаваемые вопросы.

Работа с графикой:
Исходники программ, работающих с графикой и графическими библиотеками (GraphABC, OpenGL и пр.).
Проектирование игр:
Инструкции, советы и пр.:
Инструкции, касающиеся работы с PascalABC.NET, советы для новичков и пр.
Работа со строками:
Базовые алгоритмы:
23
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2013, 15:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Полезные коды для PascalABC.NET (PascalABC.NET):

Модуль для PascalABC.NET - PascalABC.NET
Здравствуйте уважаемые форумчане, возник вопрос почему не работает модуль. Вот модуль unit Sockets; #reference 'System.dll' ...

В чем разница PascalABC.net и PascalABC - PascalABC.NET
Скажите в чем разница PascalABC.net И PascalABC. Помню когда-то давно программы работающие в PascalABC у меня не работали в .net

Процедура GetMem для PascalABC.NET - PascalABC.NET
Долго долго курил страницы форума, изучал динамические списки. Когда код для программы уже практически собрался в единое целое решил...

Исправить код для PascalABC.net - PascalABC.NET
как минимум, первое место которое ему не нравиться это как я обьявляю тип объект const size=10; type pvec=^vec; ...

Есть ли PascalABC.NET для Mac OS X? - PascalABC.NET
Есть ли PascalABC.NET для Mac OS X?

Создание своего модуля для PascalABC.net - PascalABC.NET
Здравствуйте уважаемые форумчане, подскажите как создать из файла Pas файл PCU. Чем и как его можно откомпилировать? Просто стоит задача...

120
BaboshinSD
334 / 273 / 28
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
13.04.2013, 14:30  [ТС] #16
В: А можно сделать так, чтобы одновременно воспроизводил несколько звуков?
О, создайте 2 экземпляра плеера:
2 экземпляра плеера
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
{$reference 'PresentationCore.dll'}
 
begin
  var Player1 := new System.Windows.Media.MediaPlayer;
  Player1.Open( new System.Uri('1.mp3', System.UriKind.Relative));
  Player1.Play();
  
  var Player2 := new System.Windows.Media.MediaPlayer;
  Player2.Open( new System.Uri('2.mp3', System.UriKind.Relative));
  Player2.Play();
  
  System.Windows.Forms.Application.Run();
end.
7
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 15:15 #17
В: Как перевернуть строку процедурой?
О:
Процедура ReverseString
Pascal
1
2
3
4
procedure ReverseString(var s:string); //назвать можно как угодно
begin
s:=ReverseString(s); //Это ФУНКЦИЯ которая возвращает перевернутую строку
end;

Да, мне известно что есть функция которая возвращает перевернутую строку
Но это процедура которая переворачивает введеную переменную без присваивания

Нашел такую фичу:
Если описание процедуры такое: (var s:string)
то в процессе выполнения будет использоваться не переменная s а та переменная, которая была написана в этом месте
То есть
Кликните здесь для просмотра кода
Pascal
1
2
3
4
5
6
7
8
9
function func(s:string):string;
begin
result:=reversestring(s);
end;
 
begin
s:='СЛОВО';
s:=func(s);
writeln(s); //ОВОЛС


равноценно
Кликните здесь для просмотра кода
Pascal
1
2
3
4
5
6
7
8
9
procedure func(var s:string);
begin
s:=reversestring(s);
end;
 
begin
s:='СЛОВО';
func(s);
writeln(s); //ОВОЛС
2
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 15:15 #18
В: Функция которая возвращает количество указанной буквы?
О:
Функция Count
Pascal
1
2
3
4
5
6
function count(s:string;c:char):integer;
begin
for var i:=1 to length(s)-1 do
if s[i]=c then
inc(result);
end;
1
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 16:03 #19
В: Процедура помещающая слова из строки в массив?
О:
процедура count
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure count(var arr:array of string;s:string); 
var k:integer; 
begin
if not (s[length(s)]=' ') then begin
setlength(s,length(s)+1);
s[length(s)]:=' '; end;
setlength(arr,count(s,' ')+1);
for var i:=1 to count(s,' ')+1 do begin
repeat
k+=1;
arr[i-1]+=s[k];
until s[k+1]=' ';
k+=1;
end;
end;


Код доказательства что это работает
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var words:array of string;
str:string;
///Считает количество 'c' в строке 's'
function count(s:string;c:char):integer; begin
for var i:=1 to length(s)-1 do
if s[i]=c then
inc(result);
end;
 
///Разбирает строку 's' на слова и помещает в массив 'arr'
procedure count(var arr:array of string;s:string); 
var k:integer; begin
setlength(arr,0);
if not (s[length(s)]=' ') then begin
setlength(s,length(s)+1);
s[length(s)]:=' '; end;
setlength(arr,count(s,' ')+1);
for var i:=1 to count(s,' ')+1 do begin
repeat
k+=1;
arr[i-1]+=s[k];
until s[k+1]=' ';
k+=1;
end;
end;
 
///Выводит в столбик массив
procedure writelnArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
writeln(arr[i]);
end;
 
///Выводит в строчку массив
procedure writeArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
write(arr[i],' ');
end;
 
begin
str:='Строка состоящая из пяти слов';
count(words,str);
writelnArray(words);
writeln;
str:='Строка из четырех слов';
count(words,str);
writelnArray(words);
writeln;
str:='Здесь три слова';
count(words,str);
writelnArray(words);
writeln;
str:='Два слова';
count(words,str);
writelnArray(words);
writeln;
str:='Слово';
count(words,str);
writelnArray(words);
end.


Кстати,
В: Вывести массив строк?
О:
процедура WritelnArray
Выводит массив в столбик
Pascal
1
2
3
4
5
procedure writelnArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
writeln(arr[i]);
end;

процедура WriteArray
Выводит в строчку массив
Pascal
1
2
3
4
5
procedure writeArray(arr:array of string);
begin
for var i:=0 to length(arr)-1 do
write(arr[i],' ');
end;
2
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
21.04.2013, 16:03 #20
Знаешь процедуру inc(i:integer) ?
Вот её код
procedure Inc
Pascal
1
2
3
4
procedure Inc(var i: integer);
begin
  i += 1;
end;

без var не будет работать
0
BaboshinSD
334 / 273 / 28
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
21.04.2013, 16:19  [ТС] #21
Цитата Сообщение от Ragnazar Посмотреть сообщение
без var в описании не будет работать
Вот с "var", без него такой ошибки нет.
0
Миниатюры
Полезные коды для PascalABC.NET  
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
31.05.2013, 15:45 #22
PictureBox.Load('Image.png') это конечно легко
Но носить все используемые картинки вне exe'шника это лишнее
Ведь PascalABC.NET использует .NET, а в .NET есть ресурсы добавляющиеся в сам файл!
Важно положить картинку рядом с файлом что-бы компилятор знал что в себя пихать
В: Как использовать картинку не копируя её к файлу?
О: Используйте ресурсы!
Директива resource
Pascal
1
2
3
4
5
{$resource MyImage.png} //Загружаем картинку в ресурсы
var MyImage:System.drawing.Image;
begin
MyImage:=Image.FromStream(GetResourceStream('MyImage.png')); //Пользуемся картинкой
end.
Viola!
Если более углубляться в технику, то можно понять что директива {$resource }
Создает поток с графическими файлами (Возможно и с текстовыми, но на офф сайте написано что только графика)
Соответственно их этого потока вы можете вытаскивать то, что вам нужно тем, чем вам нужно.
P.S. GetResourceStream возвращает System.IO.Stream
P.P.S Если кому хочется мороки, можете использовать System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream(String)


И раз уж зашла речь про ресурсы и картинки то
В: Как поставить на каждую форму свою иконку?
О: Ресурсы-же!
Достаем иконку из потока
Pascal
1
2
3
4
5
6
7
8
9
{$resource Icon.ico} //Сначала конечно загрузим её
var 
MyIcon:System.drawing.Icon;
MyForm:System.windows.forms.form;
begin
MyForm:=new Form; //Обозначим форму
MyIcon:=new Icon(GetResourceStream('MyImage.png')); //Достанем иконку
MyForm.Icon:=MyIcon; //Поставим иконку
System.windows.forms.Application.run(MyForm); //Запустим форму
Viola!
Но заметьте, иконка приложения не сменилась, сменилась иконка только у формы для того что-бы сменить иконку приложения
Используйте инструкция из топика Как установить свою иконку приложения?
5
BaboshinSD
02.06.2013, 10:49  [ТС]
  #23

Не по теме:

Ragnazar, действительно полезные примеры, прикрепил в шапке.

0
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
08.06.2013, 18:51 #24
В: Как убрать программу с чёрным окошечком, скомпилированную в PascalABC.NET?
О:
Убираем окно консоли
Если твое приложение имеет интерфейс (Кнопки, окошки) то в самое начало файла добавь строчку
{$apptype windows}
Это директива компилятору, что твое приложение использует окна и консоль ненужна
{$apptype console}
Сообщает что консоль нужна
1
Ragnazar
37 / 37 / 4
Регистрация: 09.03.2013
Сообщений: 114
Записей в блоге: 2
09.06.2013, 09:33 #25
BaboshinSD, Насчет "Делаем форму круглой (или любой другой формы)"
Там вы используете
Pascal
1
2
MainForm.BackColor := Color.HotPink
MainForm.TransparencyKey := Color.HotPink
А не проще ли
Pascal
1
MainForm.TransparencyKey := MainForm.BackColor
?
0
AltTwo
5 / 1 / 0
Регистрация: 13.06.2013
Сообщений: 20
13.06.2013, 21:45 #26
В: возможно ли сделать подобие браузера на pascalabc.NET
О:
Кликните здесь для просмотра всего текста

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#apptype windows
#reference 'System.Windows.Forms.dll'
uses
  System, 
  System.Windows.Forms,
  System.Net;
var w := new WebBrowser;
var bbr := new Form;
begin
w.Url := new System.Uri('http://www.google.ru/');
w.Dock := Dockstyle.Fill;
bbr.Controls.Add(w);
Application.Run(bbr);
end.
Подобным образом можно создавать "проводник" по отдельной папке: адрес должен иметь вид file:///путь к папке
0
Striker
Ведущий программист C#
240 / 219 / 49
Регистрация: 19.08.2012
Сообщений: 498
Записей в блоге: 1
14.06.2013, 08:03 #27
AltTwo, Только правильнее будет писать вот так:

Кликните здесь для просмотра всего текста
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
uses
  System, 
  System.Windows.Forms,
  System.Net;
 
var
  w := new WebBrowser;
 
var
  bbr := new Form;
 
begin
  w.Url := new System.Uri('http://www.google.ru/');
  w.Dock := Dockstyle.Fill;
  bbr.Controls.Add(w);
  Application.Run(bbr);
end.


Т.к. Директивы компилятора в стиле # более не поддерживаются.
3
КонецСвета
Почетный модератор
7927 / 3898 / 940
Регистрация: 30.10.2011
Сообщений: 5,379
15.06.2013, 15:43 #28
В: Нужен рисунок кота.
О:
мордашка кота
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses graphABC;
begin
//размер окна
setwindowsize(600,500);
//ушки
setbrushcolor(clGray);
Ellipse(320,30,490,400);
Ellipse(120,30,300,400);
setbrushcolor(clBisque);
Ellipse(335,40,480,380);
Ellipse(140,40,280,380);
//голова
setbrushcolor(clGray);
Ellipse(100,430,500,130);
//глаза
setbrushcolor(clNavy);
Ellipse(250,240,200,310);
Ellipse(350,240,400,310);
setbrushcolor(clwhite);
Ellipse(240,270,220,300);
Ellipse(360,270,380,300);
//мордочка 
setbrushcolor(clblack);
Ellipse(270,330,330,370);
line(300,370,300,400);
Arc(300,280,120,220,320);
// усы
line(50,350,200,350);
line(30,340,190,340);
line(10,330,180,330);
 
line(410,330,570,330);
line(400,340,560,340);
line(390,350,550,350);
//брови 
line(240,230,220,150);
line(230,230,180,80);
line(220,230,180,150);
 
line(360,230,380,150);
line(370,230,430,80);
line(380,230,430,150);
 
end.
образец
Полезные коды для PascalABC.NET

Не по теме:

небольшое послесловие
большая часть работ сделана изначально под Pabc и, следовательно, совместима с ним при небольшой переделке)

2
КонецСвета
Почетный модератор
7927 / 3898 / 940
Регистрация: 30.10.2011
Сообщений: 5,379
15.06.2013, 15:43 #29
В: Нужен рисунок шахматной доски.
О:
шахматная доска, ленивый вариант
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
uses graphabc;
var i,j: byte;
 
begin
setwindowsize(400,400);
for i:=1 to 8 do
  for j:=1 to 8 do
   //если счетчик для i и для j четен, или и тот и другой нечетны одновременно - черная клетка 
   if (odd(i) and odd(j)) 
    or ((not (odd(i))) and (not (odd(j)))) then
      begin
      setbrushcolor(clblack);
      rectangle(i*50-50,j*50-50,i*50,j*50);
      end;
end.
образец
Полезные коды для PascalABC.NET

Не по теме:

небольшое послесловие
большая часть работ сделана изначально под Pabc и, следовательно, совместима с ним при небольшой переделке)

1
КонецСвета
Почетный модератор
7927 / 3898 / 940
Регистрация: 30.10.2011
Сообщений: 5,379
15.06.2013, 15:43 #30
В: Нужен рисунок кролика.
О:
кролик и морковка
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
uses graphABC;
begin
//размер окна
setwindowsize(500,400);
 
setbrushcolor(clgray);
//хвост
circle(450,300,20);
//тело
ellipse(250,200,450,350);
//уши
ellipse(190,50,250,200);
ellipse(260,50,320,200);
 
setbrushcolor(clsilver);
ellipse(200,60,240,200);
ellipse(270,60,310,200);
//лапки и голова
setbrushcolor(clgray);
circle(260,210,70);
circle(260,340,25);
circle(300,340,25);
circle(410,320,45);
ellipse(350,370,440,340);
//мордочка
setbrushcolor(clsilver);
circle(275,240,20);
circle(235,240,20);
setbrushcolor(clblack);
circle(255,230,10);
//глаза
setbrushcolor(clwhite);
circle(280,200,15);
circle(230,200,15);
setbrushcolor(clblack);
circle(275,200,7);
circle(225,200,7);
//морковь
line(20,150,80,350);
line(150,150,80,350);
line(20,150,150,150);
floodfill(80,200,clred);
line(20,20,60,150);
line(160,20,120,150);
line(20,20,82,100);
line(160,20,80,100);
floodfill(80,140,clgreen);
end.
образец
Полезные коды для PascalABC.NET

Не по теме:

небольшое послесловие
большая часть работ сделана изначально под Pabc и, следовательно, совместима с ним при небольшой переделке)

2
15.06.2013, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2013, 15:43
Привет! Вот еще темы с ответами:

Надо найти библиотеку для PascalABC NET - PascalABC.NET
Всем привет. Вот сейчас пишу движок для PascalABC NET. Для графики взял OpenGL. Теперь начал делать обработчик событий нажатий клавиш и тут...

Написать программу из задачника среды PascalABC.NET для задания integer8: - PascalABC.NET
Написать программу из задачника среды PascalABC.NET для задания integer8: Потрудитесь выложить задание должным образом оформленное, и с...

Установится ли PascalABC.NET на систему, где установлен только .NET 4.6.1? - PascalABC.NET
Привет всем. Вопрос, собственно, озвучен выше. Конкретнее: есть компьютер со свежеустановленной Win10 x64, на которой присутствует...

Переделайте "Старт ракеты" для PascalABC.net - PascalABC.NET
uses graph,crt; procedure raketa(x,y,c:integer); begin setcolor(c); line(x,y,x-10,y+10); line(x,y,x+10,y+10); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru