Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107

Ввод слов в Edit - разрешённые символы

27.04.2018, 14:51. Показов 6689. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
У меня учебный проект - добавление слов в ListBox для сортировки. Можно добавлять по одному слову за раз кириллицей или латиницей, до 30 символов. Также надо вставлять слова в Edit из БО. Я экспериментально выяснил, что горячие клавиши windows тоже генерируют какие-то символы юникода и сделал вот таким образом:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Обработка нажатий клавиш в EditInput
procedure TMainForm.EditInputUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
  case UTF8Key of
    'a'..'z', 'A'..'Z', 'а'..'ё', 'А'..'Я', 'Ё': UTF8Key := UTF8Key;  // Ввод букв - разрешён
    'символ', 'символ', 'символ': UTF8Key := UTF8Key;  // Ctrl+X, Ctrl+C, Ctrl+V - разрешены (Ctrl+Z так не получается)
    #8: UTF8Key := UTF8Key;  // Backspace - разрешён
    #13: ButtonAddClick(Sender);  // Нажатие Enter - Добавить строку
  else UTF8Key := #0;  // Остальные клавиши - запрещены
  end;
end;
 
// Для вставки из БО
procedure TMainForm.EditInputChange(Sender: TObject);
begin
  if (UTF8Pos(' ', EditInput.Text) <> 0) then
    EditInput.Text := editText;
 
  editText := EditInput.Text;
end;
В строке 6 символы здесь не отображаются - там стрелочки и псевдографика какая-то.
Осталось 2 вопроса:
1) Как можно перехватить Ctrl+V и контекстное меню Edit-а, а не через OnChange?
2) Как сделать ввод только разрешённых символов (с клавиатуры и из БО) более "правильно", т. е. не в учебной, а в хорошей программе?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2018, 14:51
Ответы с готовыми решениями:

Ввод в edit
мне нужно вводить в edit только буквы if not (key in ) then key:=#0; но первая должна быть заглавная, т.е. не смотря на то, что...

Контролируемый ввод в Edit
Необходимо контролировать ввод в Edit: т.е. разрешается вводить, например, только цифры. Это решается при помощи MaskEdit. Но потом нужно...

Как при вводе текста в один Edit загружать те же символы во второй Edit?
помогите есть 2 mdi окна в них эдиты. как при вводе текста в 1 эдит загружать теже символы во второй эдит? как хотя бы получить информацию...

10
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33194 / 21480 / 8231
Регистрация: 22.10.2011
Сообщений: 36,848
Записей в блоге: 12
27.04.2018, 15:21
Лучший ответ Сообщение было отмечено Sharpix как решение

Решение

Цитата Сообщение от Sharpix Посмотреть сообщение
Как можно перехватить Ctrl+V и контекстное меню Edit-а, а не через OnChange?
Не надо этого делать. Нужно работать именно по OnChange, и именно там проверять разрешены ли символы. Потому что у пользователя как минимум есть еще Drag/Drop текста в Edit, под Linux - вставка средней кнопкой мыши... Всего не предусмотришь. А вот в тот момент, когда содержимое изменилось - тут и проверять, и убирать ненужное.
1
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107
27.04.2018, 15:31  [ТС]
Понятно. Т. е. данное решение (UTF8KeyPress и OnChange) можно вполне использовать в нормальной, рабочей программе?
0
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107
11.05.2018, 15:32  [ТС]
Переделал вот так:
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
procedure TForm1.Edit1Change(Sender: TObject);
var
  symbols: String;
  i: Integer;
begin
  symbols := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  for i := 1 to Length(Edit1.Text) do
  begin
    if (Pos(Copy(Edit1.Text, i, 1), symbols) = 0) then  // Если i-й символ отсутствует в наборе символов...
    begin
      Edit1.Text := editText;  // ...оставляем прежний текст
      Edit1.SelStart := curPos;  // Устанавливаем курсор в прежнюю позицию
      Break;
    end;
  end;
 
  editText := Edit1.Text;
end;
 
procedure TForm1.Edit1Click(Sender: TObject);
begin
  curPos := Edit1.SelStart;
end;
 
procedure TForm1.Edit1Enter(Sender: TObject);
begin
  curPos := Edit1.SelStart;
end;
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  curPos := Edit1.SelStart;
end;
Теперь при закрытии приложения иногда выскакивает ошибка: "Проект ... вызвал класс исключения 'External SIGSEGV' По адресу 40F368". Иногда - это значит в зависимости от того, что я ввёл в Edit.

Например:
Если я ввожу
"4 символа - запрещённый символ - 4 символа" - ошибка
"4 символа - запрещённый символ - 5 символов" - ошибки нет

А если вместо Copy(Edit1.Text, i, 1) сделать Edit1.Text[i], то ошибка будет появляться по-другому:
"4 символа - запрещённый символ - 4 символа" - ошибка
"4 символа - запрещённый символ - 5 символов" - ошибка

ну и т. п.
Подскажите, где искать. Я уже всё перепробовал...

Добавлено через 22 часа 16 минут
Забыл написать - если не вводить запрещённый символ, то ошибки не бывает вовсе, т. е. ошибка возникает если хотя бы раз сработает условие if.
Может это баг Лазаруса?
Мне также интересно, как можно ту же задачу решить по-другому? Т. е. вопрос №2 из первого поста остаётся в силе:
Цитата Сообщение от Sharpix Посмотреть сообщение
2) Как сделать ввод только разрешённых символов (с клавиатуры и из БО) более "правильно", т. е. не в учебной, а в хорошей программе?
Добавлено через 1 час 9 минут
Решил:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Edit1Change(Sender: TObject);
var
  symbols, textInEdit: String;
  i: Integer;
begin
  symbols := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  for i := 1 to Length(Edit1.Text) do
  begin
    if (Pos(Copy(Edit1.Text, i, 1), symbols) = 0) then  // Если i-й символ отсутствует в наборе символов...
    begin
      textInEdit := Edit1.Text;
      Delete(textInEdit, i, 1);  // ...удаляем этот символ
      Edit1.Text := textInEdit;
      Edit1.SelStart := curPos;  // Устанавливаем курсор в прежнюю позицию
      Break;
    end;
  end;
end;
Глобальная переменная здесь оказалась лишней - может дело в ней было...

Спасибо за подсказку:
Цитата Сообщение от volvo Посмотреть сообщение
убирать ненужное
недостаточно внимательно прочитал сразу.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33194 / 21480 / 8231
Регистрация: 22.10.2011
Сообщений: 36,848
Записей в блоге: 12
11.05.2018, 17:35
Цитата Сообщение от Sharpix Посмотреть сообщение
Решил:
Плохое решение. Если понадобится отслеживать правильность ввода в случае, когда пользователь скопипастил строку в Edit - нужно будет переписывать код. Так почему его сразу не сделать универсальным? Потому что приведенный в предыдущем посте:
  1. останавливается после удаления первого же найденного некорректного символа, ведь при вводе в Edit не может быть больше одного некорректного символа, вроде бы все в порядке, а вот при копипасте - очень даже может,
  2. код использует неправильный обход строки. Первое - нужно использовать обратный проход: от длины строки до 1-цы, иначе строка, укорачиваемая на нескольких итерациях, может закончиться, а запомненная длина ее (особенность Паскаля, он не вычисляет длину на каждой итерации, а запоминает в начале выполнения цикла) будет больше длины реальной, вот и вылет за пределы строки. Второе - Лазарус использует кодировку UTF8, поэтому желательно использовать UTF8Length/UTF8Copy/UTF8Delete из модуля LazUTF8.
1
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107
17.05.2018, 14:42  [ТС]
Может быть этот код работает немножечко криво, но функцию свою выполняет, в т. ч. и при копипасте с несколькими запрещёнными символами. После удаления символа строка выводится в edit, возникает рекурсия - обработчик вызывает сам себя и удаляется следующий запрещённый символ.
UTF8 я специально временно убрал на время экспериментов, надо только помнить, что при тестировании можно использовать латиницу и цифры.
В общем, вот что в итоге получилось:
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
var
  curPos, textLen, selLen: Integer;
  changedOK: Boolean;
 
procedure TForm1.Edit1Change(Sender: TObject);
var
  symbols, textInEdit: String;
  i, length2: Integer;
  txtChanged: Boolean;
begin
  if changedOK = true then  // Если в строке были произведены все необходимые удаления...
  begin
    changedOK := false;
    Exit;  // ...выходим из этого обработчика
  end;
 
  symbols := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  textInEdit := Edit1.Text;
  txtChanged := false;
 
  for i := Length(Edit1.Text) downto 1 do
  begin
    if (Pos(Copy(Edit1.Text, i, 1), symbols) = 0) then  // Если i-й символ отсутствует в наборе символов...
    begin
      Delete(textInEdit, i, 1);  // ...удаляем этот символ
      txtChanged := true;
    end;
  end;
 
  if txtChanged then  // Если символы были удалены...
  begin
    changedOK := true;
    Edit1.Text := textInEdit;  // ...пишем в Edit итоговый текст
    length2 := Length(textInEdit);  // Длина строки после удаления запрещённых сиволов
    Edit1.SelStart := curPos + (length2 - textLen + selLen);  // и устанавливаем курсор в прежнюю позицию
  end;
 
  textLen := Length(Edit1.Text);  // Длина строки до входа в обработчик
end;
 
procedure TForm1.Edit1Click(Sender: TObject);
begin
  curPos := Edit1.SelStart;
  selLen := Edit1.SelLength;  // Длина выделения
end;
 
procedure TForm1.Edit1Enter(Sender: TObject);
begin
  curPos := Edit1.SelStart;
  selLen := Edit1.SelLength;
end;
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  curPos := Edit1.SelStart;
  selLen := Edit1.SelLength;
end;
Рекурсивный вызов я решил заблокировать - сначала я подумал, что при ручном наборе производительность кода от этого не пострадает, но а вдруг кто-нибудь вставит строку из миллиона символов?
Теперь вроде любая вставка работает правильно - и в конец строки и в середину и вместо выделения. Без глобальных переменных обойтись не удалось.
volvo, подскажи, теперь я всё, что надо предусмотрел (с твоей и с божьей помощью)?

Добавлено через 23 часа 12 минут
Ах, да, вспомнил своё же ТЗ из 1-го поста:
Цитата Сообщение от Sharpix Посмотреть сообщение
Можно добавлять по одному слову за раз кириллицей или латиницей, до 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
49
50
51
52
var
  MainForm: TMainForm;
  curPos, textLen, selLen: Integer;
 
procedure TMainForm.EditInputChange(Sender: TObject);
var
  symbols, textInEdit: String;
  i, length2: Integer;
  txtChanged: Boolean;
begin
  symbols := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъьыэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЫЭЮЯ';
  textInEdit := EditInput.Text;
  txtChanged := false;
 
  for i := UTF8Length(EditInput.Text) downto 1 do
  begin
    if (UTF8Pos(UTF8Copy(EditInput.Text, i, 1), symbols) = 0) then  // Если i-й символ отсутствует в наборе символов...
    begin
      UTF8Delete(textInEdit, i, 1);  // ...удаляем этот символ
      txtChanged := true;
    end;
  end;
 
  if txtChanged then  // Если символы были удалены...
  begin
    EditInput.Text := textInEdit;  // ...пишем в Edit итоговый текст
    length2 := UTF8Length(textInEdit);  // Длина строки после удаления запрещённых сиволов
    EditInput.SelStart := curPos + (length2 - textLen + selLen);  // и устанавливаем курсор в прежнюю позицию
  end;
 
  textLen := UTF8Length(EditInput.Text);  // Длина строки до входа в обработчик
end;
 
procedure TMainForm.EditInputClick(Sender: TObject);
begin
  curPos := EditInput.SelStart;  // Определение позиции курсора
  selLen := EditInput.SelLength;  // Длина выделения
end;
 
procedure TMainForm.EditInputEnter(Sender: TObject);
begin
  curPos := EditInput.SelStart;  // Определение позиции курсора
  selLen := EditInput.SelLength;  // Длина выделения
end;
 
procedure TMainForm.EditInputKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  curPos := EditInput.SelStart;  // Определение позиции курсора
  selLen := EditInput.SelLength;  // Длина выделения
  if Key = VK_RETURN then ButtonAddClick(Sender);  // Нажатие Enter добавляет строку
end;
Всё правильно?
0
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107
18.05.2018, 15:11  [ТС]
Что же я такого написал (или не написал), что мне никто ответить не хочет? Странное отношение к начинающим, мне кажется. Хоть бы объяснили, что не так.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 176
18.05.2018, 15:40
Цитата Сообщение от Sharpix Посмотреть сообщение
что не так
Удаление символ без предупреждения пользователя - не совсем юзабельно будет.
Это самое первое. Это всё равно что навредить пользователю, потому что так он сам ошибку нашёл-бы, если её видно было-бы, а теперь она получится от него скрытой, намётанный глаз найдёт, а вот кому-то проблема будет.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33194 / 21480 / 8231
Регистрация: 22.10.2011
Сообщений: 36,848
Записей в блоге: 12
18.05.2018, 15:44
Цитата Сообщение от Sharpix Посмотреть сообщение
Хоть бы объяснили, что не так.
Отношение к программированию не так. После вот этого:
Цитата Сообщение от Sharpix Посмотреть сообщение
Может быть этот код работает немножечко криво, но функцию свою выполняет
о чем можно говорить? Ну, выполняет - так выполняет, пускай выполняет дальше, тебе же главное не написать правильно, а сделать так, чтобы работало. Ну, вот, работает (пока, по крайней мере). Кому еще надо время терять на твои художества, если оно и тебе самому не сильно нужно? Я лично лучше помогу человеку, который хочет написать код правильно, грамотно, чтобы ни сейчас, ни потом проблем не было.
0
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107
21.05.2018, 14:46  [ТС]
Цитата Сообщение от Hretgir Посмотреть сообщение
Удаление символ без предупреждения пользователя - не совсем юзабельно будет.
Конечно, я об этом не подумал. Буду добавлять - обычно я все сообщения для пользователя вывожу в StatusBar.

Цитата Сообщение от Sharpix Посмотреть сообщение
Может быть этот код работает немножечко криво, но функцию свою выполняет
Этим я хотел показать, что твои слова не соответствуют действительности:
Цитата Сообщение от volvo Посмотреть сообщение
останавливается после удаления первого же найденного некорректного символа
а не своё отношение к программированию. О каком отношении может идти речь, если я начинающий. Мне дай бог разобраться c функциями/классами/алгоритмами, а ты мне про отношение говоришь. Ты бы ещё обвинил меня в том, что у меня мотивации не хватает. Я написал, то, что смог, руководствуясь твоими подсказками. Я думал, старался, между прочим. А от тебя, кроме критики, я заметил, вообще очень трудно чего-нибудь дождаться:
Цитата Сообщение от volvo Посмотреть сообщение
Плохое решение.
Но ведь лучше ж чем было.
Цитата Сообщение от volvo Посмотреть сообщение
тебе же главное не написать правильно, а сделать так, чтобы работало
Я-то, наоборот, стараюсь всё делать как можно более правильно, только для этого нужен большой опыт, а у меня его нет. Ну и терпения иногда не хватает.
Я хочу научиться писать хороший код и догадываюсь, что на это потребуется много труда и времени.
Последний свой код я написал так хорошо, насколько смог и хочу знать - что я сделал так, а что не так, с точки зрения профессионала(ов).

Добавлено через 21 час 38 минут
Цитата Сообщение от Sharpix Посмотреть сообщение
Можно добавлять по одному слову за раз кириллицей или латиницей, до 30 символов.
Согласно ТЗ запрещёнными символами являются знаки препинания, спецсимволы и цифры, т. е., если скопировать в БО часть текста до 30 символов, а потом удалить запрещённые символы (с предупреждением или без), то несколько слов сольются в одно - и кому это надо?
Самое лучшее, что я могу предложить - вставлять слово из БО только в том случае, если пользователь корректно выделил и скопировал одно слово. Если же вставленный текст не является одним словом, то вставлять ничего не надо, а вывести сообщение: "Текст в буфере обмена не соответствует формату". Исключениями могут быть только слова с дефисом, но на данном этапе на них можно забить.
0
 Аватар для Sharpix
7 / 7 / 0
Регистрация: 07.10.2013
Сообщений: 107
24.05.2018, 14:40  [ТС]
Вот так можно вставлять, только если в БО корректные символы (одно слово). В остальных случаях содержимое Edit остаётся прежним с выводом сообщения пользователю. Не знаю - правильный это код или не правильный, как мог, так и написал, лучше не получается (пока).
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
// Вставка только одного слова
procedure TForm1.Edit2Change(Sender: TObject);
var
  symbols, textInEdit: String;
  i: Integer;
begin
  StatusBar.SimpleText := '';
  symbols := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщъьыэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЫЭЮЯ';
  textInEdit := Edit2.Text;
 
  for i := UTF8Length(textInEdit) downto 1 do  // Берем строку с новыми символами
  begin
    if (UTF8Pos(UTF8Copy(textInEdit, i, 1), symbols) = 0) then  // Если хотя бы один символ отсутствует в наборе символов...
    begin
      Edit2.Text := textBefore;  // записываем в Edit прежнюю строку
      StatusBar.SimpleText := 'Недопустимый символ';
      Edit2.SelStart := curPos + selLen;  // и устанавливаем курсор в прежнюю позицию
      Break;
    end
    else
      Edit2.SelStart := curPos + (UTF8Length(textInEdit) - UTF8Length(textBefore) + selLen);  // Устанавливаем курсор при вставке (с выделением или без)
  end;
 
  textBefore := Edit2.Text;  // Строка до входа в обработчик
end;
 
procedure TForm1.Edit2Click(Sender: TObject);
begin
  curPos := Edit2.SelStart;  // Определение позиции курсора
  selLen := Edit2.SelLength;  // Длина выделения
end;
 
procedure TForm1.Edit2Enter(Sender: TObject);
begin
  curPos := Edit2.SelStart;  // Определение позиции курсора
  selLen := Edit2.SelLength;  // Длина выделения
end;
 
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
  );
begin
  curPos := Edit2.SelStart;  // Определение позиции курсора
  selLen := Edit2.SelLength;  // Длина выделения
end;
Вот только обход строки в цикле происходит в обратном направлении, а ошибка о выходе за пределы строки всё равно выскакивает (если был введён некорректный символ, иногда).
Цитата Сообщение от volvo Посмотреть сообщение
нужно использовать обратный проход: от длины строки до 1-цы, иначе строка, укорачиваемая на нескольких итерациях, может закончиться, а запомненная длина ее (особенность Паскаля, он не вычисляет длину на каждой итерации, а запоминает в начале выполнения цикла) будет больше длины реальной, вот и вылет за пределы строки
И ещё непонятно - почему вылет за пределы строки происходит при закрытии приложения - цикл-то тут при чём?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.05.2018, 14:40
Помогаю со студенческими работами здесь

Запрет на ввод чисел в EDIT, пока не будет заполнено другое поле edit
Здравствуйте! Дело в том, что мне нужно сделать так, чтобы одно поле edit нельзя было заполнять до тех пор, пока не заполнено другое поле...

Edit Label (линейный) Panel, Edit Label (строки), Memo (одномер-ный),ComboBox ListBox , RadioButton (RadioGroup) CheckBox ,StringGrid (ввод пароля)
1)Edit Label (линейный) Panel Проверить истинность высказывания: &quot;Цифры данного трехзначного числа образуют возрастающую...

Обеспечить ввод и вывод списка слов в прямом и обратном порядке, и вычисление числа слов в этом списке
Изменить программу так, чтобы она обеспечивала ввод и вывод списка символов в прямом и обратном порядке. Чтение символа с клавиатуры до...

Ввод слов в массив и подсчёт введённых слов
как можно решить эту задачу:Напишите программу,использующую массив char и цикл для чтения по одному слову за раз до тех пор,пока не будет...

Запрет на символы в Edit
Привет всем! Подскажите пажалста как запретить ввод любых символов в поле Edit кроме целочисленных чисел? з.ы....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru