Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193

Переношу процедуры в отдельный модуль подскажите по структуре

14.11.2023, 08:45. Показов 1976. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я начал выносить процедуры и функции которые были раньше методами главной формы, но по сути не привязаны к элементам самой формы, в отдельный модуль.

Программа работает.
Но хотелось бы сразу уточнить немного струкутру.
С толку сбило что в модуле не работает Контрл+Шифт+С выдавалась ошибка до тех пор пока я просто не написал реализацию функции ниже в коде. Контрл+Шифт+С видимо не работает в модуле *.pas, только с формаой?

1)Посмотрите структуру пожалуйста, последовательность, все верно interface, uses,type, procedure, var, implementation, uses ?
TUser да объявлен каряво но я только прочитал про свойства и поля потом переделаю.

2) И второй вопрос для реализации методов класса TConfig (их описания) нам нужно объявить переменную этого класса?
Я подозреваю что у меня сделано не верно.
У меня объявлена глобальная переменная Config
Delphi
1
2
3
var
  User: TUser;
  Config: TConfig;
Которая потом используется в методе procedure TConfig.InitConfig; который наполняет объект всем необходимым.

Я подозревая что внутри каждого метода класса TConfig будь то InitConfig или еще какого либо я должен объявить переменную ConfigLocal: TConfig; и в описании методов использовать её, а не глобальную переменную Config.
А уже в основной программе на главной форме писать
Delphi
1
2
3
var
  User: TUser;
  Config: TConfig;
и создавать экземпляр класса TConfig?

Или все верно сделано что в модуле myUses1 объявлена глобальная переменная Config?





Кликните здесь для просмотра всего текста

Delphi
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
unit MyUses1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  Vcl.ComCtrls, Vcl.Menus, System.ImageList, Vcl.ImgList, Vcl.ToolWin,
  Vcl.WinXCalendars, Vcl.Buttons, Data.DB, Vcl.Grids, Vcl.DBGrids, System.IniFiles;
 
type
  TUser = class(TObject)
  public
    Valid: Boolean;
    Id: Integer;
    Login: string;
    Password: string;
    FIO: string;
    TabNomer: string;
    Status: Boolean;
    constructor Create; dynamic;
    destructor Destroy; override;
  end;
 
  TConfig = class(TObject)
  private
    FFileNameConfig, FFileNameMestoRaboti, FFileNameDetalName: string;
    FMestoRabotiNoMore, FDetalNameNoMore: Integer;
    FUserSotrudnikModif: Boolean;
    FPanelNameFull, FFieldNameFull: TStringList;
    FIdTipByItemIndex, FTipByItemIndex, FShowPanelItemIndex, FShowColumnItemIndex: TStringList;
    FColumnName, FColumnWidth: TStringList;
    FItemIndexByIdTip, FTipByIdTip: TStringList;
  public
    constructor Create; dynamic;
    destructor Destroy; override;
    procedure InitConfig;
  public
    property FileNameConfig: string read FFileNameConfig write FFileNameConfig;
    property FileNameMestoRaboti: string read FFileNameMestoRaboti write FFileNameMestoRaboti;
    property FileNameDetalName: string read FFileNameDetalName write FFileNameDetalName;
    property MestoRabotiNoMore: Integer read FMestoRabotiNoMore write FMestoRabotiNoMore;
    property DetalNameNoMore: Integer read FDetalNameNoMore write FDetalNameNoMore;
    property PanelNameFull: TStringList read FPanelNameFull;
    property FieldNameFull: TStringList read FFieldNameFull;
    property IdTipByItemIndex: TStringList read FIdTipByItemIndex;
    property TipByItemIndex: TStringList read FTipByItemIndex;
    property ShowPanelItemIndex: TStringList read FShowPanelItemIndex;
    property ShowColumnItemIndex: TStringList read FShowColumnItemIndex;
    property ColumnName: TStringList read FColumnName;
    property ColumnWidth: TStringList read FColumnWidth;
    property ItemIndexByIdTip: TStringList read FItemIndexByIdTip;
    property TipByIdTip: TStringList read FTipByIdTip;
  end;
 
  procedure SetListNoMore(var List: TStringList; NoMore: Integer = 1000);
 
  function ListNoMore(List: TStrings; NoMore: Integer = 1000): TStrings;
  function SetFullInfo(Table: string = 'Catalog'): TStringList;
  function DatabaseConnection: Boolean;
  function SetSQLParam(field, str: string; prefix: string = ''; sufix: string = ''): string;
  function SetSQLParamFloatBetween(FieldName, InStr: string; OperDef: string = ' = '): string;
 
var
  User: TUser;
  Config: TConfig;
 
implementation
 
uses
  DataModule1;
 
{ TUser }
................
 
{TConfig}
 
procedure TConfig.InitConfig;
var
  ConfigIni: TIniFile;
begin
  with DM1.FDQToolTipAll do begin
    Close;
    Open;
    var I := 1;
    while not Eof do begin
      Config.IdTipByItemIndex.Add(FieldByName('IdTip').AsString);
      Config.TipByItemIndex.Add(FieldByName('Tip').AsString);
      Config.ShowPanelItemIndex.Add(FieldByName('ListShowPanel').AsString);
      Config.ShowColumnItemIndex.Add(FieldByName('ListShowColumn').AsString);
 
      Config.ItemIndexByIdTip.Values[FieldByName('IdTip').AsString] := IntToStr(I);
      Config.TipByIdTip.Values[FieldByName('IdTip').AsString] := FieldByName('Tip').AsString;
 
      Next;
      Inc(I);
    end;
    Close;
  end;
..........
 
 
 
function DatabaseConnection: Boolean;
begin
.....
end;
 
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2023, 08:45
Ответы с готовыми решениями:

Сформировать отдельный модуль, содержащий описание процедуры Double,
Сформировать отдельный модуль, содержащий описание процедуры Double, удваивающей каждое вождение символа С в строку S. Подключить данный...

выделить расчетную часть в отдельную функцию.функцию поместить в отдельный модуль.модуль подкл.к основной программе
#include <iostream> #include <conio.h> #include <locale.h> using namespace std; int main () { ...

Разработать библиотечный модуль содержащий, процедуры и функции в соответствии с заданием. Применить данные процедуры в основной программе
Разработать библиотечный модуль содержащий, процедуры и функции в соответствии с заданием. Применить данные процедуры в основной программе...

47
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
14.11.2023, 13:41
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Пытливый Посмотреть сообщение
полностью несовместимо
слышал эту песню )))
2015(18,19?) год. Промо-семинар, выходит очередная XXXE. Встает дама "с производства"
- вот зачем вы все поломали со своим юникодом! так хорошо было на Д7!!!

Обратная совместимость - очень забавная вещь. Она зачем??
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
14.11.2023, 13:42
Цитата Сообщение от Пытливый Посмотреть сообщение
Согласен, полезненько, но полностью несовместимо со старыми версиями.
Канешна, новый кот с такими приколами не будет компилиться старым компилятором. Ну и хрен с ним. Спасибо, что обратная совместимость есть!
-------
Исчо бы тернарный оператор добавили, было б ващще супир.
И если б тулбары не съезжали - вапще б космас был.
-------
Поставил все левые компоненты и пересобрал несколько своих более свежих проектов. Собралось, работает! Можно юзать, кароче.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
14.11.2023, 14:26
Теперь некоторые (все?) inline-функции из system.pas, например Length(), High(), Low(), возвращают 64-битные значения на 64-битной сборке. Хотя хинты стались старые. У меня чуть фляга не засвистела!



Будьте осторожны, граждане.
1
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
14.11.2023, 14:28  [ТС]
Цитата Сообщение от Beltar Посмотреть сообщение
Вы делаете класс, а значит понимаете, как его свойства работают. Обычно, обращение к полям, чтобы не срабатывали сеттеры, да и геттер может быть нетривиален, и его не следует дергать, но можно и специально их дернуть.
Я тут начал переписывать метод объекта своего.
И все же подумал что лучше внутри метода даже того же procedure TConfig.InitConfig; использовать свойства а не прямую запись в поле.

Например я в свойство объекта Config.ColumnName читаю информацию из INI файла сейчас у меня идет просто запись в поле FColumnName т.к.
Delphi
1
    property ColumnName: TStringList read FColumnName;
точнее сказать чтение свойства объекта ColumnName: TStringList с его последующей установкой как мне объяснили.

Так вот неплохо бы тут написать что то вроед read SetColumnName(...) дабы хоть как то отфильтровать что там в ini файле.
Но это на будущее если руки дойдут.
Delphi
1
property ColumnName: TStringList read SetColumnName(...);
Delphi
1
      ColumnName.Values[FieldByName('FieldName').AsString] := Config.IniFile.ReadString('ListColumnName', FieldByName('FieldName').AsString, FieldByName('ColumnName').AsString);
Получается надо смотреть если это прямая установка типа:
Delphi
1
2
3
  FDetalNameNoMore := 1000;
  FPanelNameFull:= TStringList.Create();
  FPanelNameFull.DelimitedText := 'D, FL, RL, L, R1, ND, BK, BF, D1, PA, P, Z, RROtDo, Alloy, ISO, Plastin, Primen, Comment, Mesto';
то можно писать в поля. Если информация из БД то 50/50 вероятно она проверенна до того как попала туда, можно тоже сразу писать в поля или через свойства, тут зависит видимо от того того калькулятор это или банковское приложение, от степени необходимой безопасности.
А если инфа из конфигурационного файла или еще откуда то надо в свойство, а свойство уже со временем как руки дойдут можно дописать методом который будет это свойство-поле проверять и устанавливать.

По итогу я бы сказал что надо писать в свойство для пущей безопасности, но если уверен в том что делаешь то можно и прямо в поле тем более если все эти установки чтения идут внутри объекта без внешнего чтнеия-установки полей.
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
14.11.2023, 15:00
надо четко понять, что является чем
если свойство - объект, например, StringList, то это ССЫЛКА на объект
т.е. вы не сможете заменить САМ объект. да и фиг с ним.
А вот все свойства и методы этого объекта ну никак не относятся к property
Именно поэтому я ввожу property только тогда, когда уже ТОЧНО НАДО вводить property
Изначально просто поле.
В любой момент его в коде позже можно заменить на property.

Другое дело, если мы хотим СОВСЕМ скрыть, что у нас есть такое поле.
Тогда нужно поле унести в private и оставить только методы доступа к нему.

Ни того ни другого я в вашем случае не вижу.

А вот про хранение настроек программы могу предложить почитать
https://www.cyberforum.ru/blog... g4883.html
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,614
14.11.2023, 15:10
Цитата Сообщение от S0563506 Посмотреть сообщение
использовать свойства а не прямую запись в поле
Типовая ситуация, у вас визуальный компонент и при изменении любого свойства, влияющего на внешний вид, он должен сразу перерисоваться, для чего сеттер данного свойства дергает отрисовку. В каком-то методе вы задаете сразу пачку разных свойств. Если вы будете обращаться через сеттер, то при каждом обращении будет перерисовка. Т. е. за время вызова метода произойдет ряд абсолютно бессмысленных перерисовок.

А на это я больно сел, когда для TIdTCPClient писал обработчик таймаута, поставил в exception вызов Connected. Прикол в том, что данный метод, лезет в сеть проверять подключение, т. е. exception летит снова. Я а, дурак, не могу понять, что не так. Так если вы в недрах класса что-то подобное сделаете вместо проверки внутреннего поля, то результат будет таким же, вы вызовете нежелательное действие.

Думать надо, должен геттер\сеттер отработать, или это противопоказано. Чаще не должен.
0
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 193
14.11.2023, 15:46  [ТС]
1)
Цитата Сообщение от krapotkin Посмотреть сообщение
если свойство - объект, например, StringList, то это ССЫЛКА на объект
т.е. вы не сможете заменить САМ объект. да и фиг с ним.
А вот все свойства и методы этого объекта ну никак не относятся к property
Именно поэтому я ввожу property только тогда, когда уже ТОЧНО НАДО вводить property
То есть по этому тут нет WRITE?
Delphi
1
property ColumnName: TStringList read TColumnName(...);
потому как мы не можем переписать сам объект?
а например запись Config.ColumnName := nil; не является записью в сам объект?

Я понимаю что это моежет быть тупы вопросы, но если не пойму то больше не буду, значит пока рано и не нужно.

2) Verevkin будет против ))), но получается что вот эти поля я могу перенести из private в publiс, убрать букву F в начале.
И в место
Delphi
1
property FileNameIniFile: string read FFileNameIniFile write FFileNameIniFile;
использовать просто запись
Delphi
1
FileNameIniFile
без [property ] вначале?


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  private
    FFormatDot: TFormatSettings;
    FIniFile: TiniFile;
    FFileNameIniFile, FFileNameMestoRaboti, FFileNameDetalName: string;
    FMestoRabotiNoMore, FDetalNameNoMore: Integer;
    FToolTipCount, FUserCount, FSotrudnikCount: Integer;
    FPanelNameFull, FFieldNameFull: TStringList;
 
  public
    property FormatDot: TFormatSettings read FFormatDot write FFormatDot;
    property IniFile: TiniFile read FIniFile write FIniFile;
    property FileNameIniFile: string read FFileNameIniFile write FFileNameIniFile;
    property FileNameMestoRaboti: string read FFileNameMestoRaboti write FFileNameMestoRaboti;
    property FileNameDetalName: string read FFileNameDetalName write FFileNameDetalName;
    property MestoRabotiNoMore: Integer read FMestoRabotiNoMore write FMestoRabotiNoMore;
    property DetalNameNoMore: Integer read FDetalNameNoMore write FDetalNameNoMore;
    property ToolTipCount: Integer read FToolTipCount write FToolTipCount;
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,614
14.11.2023, 16:09
Цитата Сообщение от S0563506 Посмотреть сообщение
а например запись Config.ColumnName := nil; не является записью в сам объект?
Это будет являться утечкой памяти.

Verevkin'у удобно написать

Delphi
1
property Field:Integer read GetField write SetField;
И у него во всех местах кода будет единообразное обращение к Field, даже если геттер и сеттер фактически пустые.

Delphi
1
2
3
4
procedure TMyClass.SetField(Value:Integer);
begin
if FField<>Value then FField:=Value;
end
И он не сломает ничего, если у него поменяется SetField, надо будет добавить какую-то логику. Он просто сделает так:

Delphi
1
2
3
4
5
6
7
8
9
procedure TMyClass.SetField(Value:Integer);
begin
if FField<>Value then
 begin
 DoSomething;
 FField:=Value;
 DoSomethingElse;
 end;
end
Если же засунуть поле Field просто в public, то в общем случае может произойти изменение правил работы с ним, была, например, прямая запись доступна, а стала недоступна, т. е. вместо изменения одной процедурки SetField надо искать по коду каждое вхождение и корректировать.

Конечно, того же самого можно добиться и старомодным

Delphi
1
2
3
4
5
6
TMyClass=class
  private
  FField:Integer;
  public
  GetField:Integer;
  SetField(Value:Integer);
Просто код, вызывающий это дело, будет более громоздким.

Другое дело, что если у вас там какое-то поле, которому не нужны геттер и сеттер, и вы совсем уж уверены, что вам не потребуется менять правила работы с ним, и для каких-то конечных классов, которые нужны только для конкретной задачи - это, скорее всего, будет верно. То да, можно засунуть в public, и так многие сделают особо не парясь, т. к. оформление всех этих методов раздражает. Поддержание порядка требует усилий. Это при том, что у Паскаля есть одна положительная черта, в нем нельзя писать код в интерфейсной секции, а в C#, например, можно и вместо простого списка компонентов класса, вы можете прямо после объявления метода увидеть сколь угодно длинную реализацию. После чего вам, возможно, захочется удавить того, кто все эти пустые геттеры и сеттеры накидал.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
14.11.2023, 16:47
Цитата Сообщение от Beltar Посмотреть сообщение
Verevkin'у удобно написать
А чо я-то сразу?
Цитата Сообщение от Beltar Посмотреть сообщение
И у него во всех местах кода будет единообразное обращение к Field, даже если геттер и сеттер фактически пустые.
Я всегда так и делаю. Чо ты ко мне привязался? Противный.
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,614
14.11.2023, 18:43
Ну так чел говорит, что ты будешь против переноса полей просто в public.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
14.11.2023, 19:07
Цитата Сообщение от Beltar Посмотреть сообщение
Ну так чел говорит, что ты будешь против переноса полей просто в public.
У меня не бывает полей в public. Я пишу большие сложные многоуровневые иерархии классов. Какие нахер поля в public? Вы там под кайфом, штоли?
0
 Аватар для Beltar
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,614
14.11.2023, 19:18
Ну выше было.

Цитата Сообщение от S0563506 Посмотреть сообщение
2) Verevkin будет против ))), но получается что вот эти поля я могу перенести из private в publiс, убрать букву F в начале.
И в место
DelphiВыделить код
1
property FileNameIniFile: string read FFileNameIniFile write FFileNameIniFile;
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
14.11.2023, 19:26
Цитата Сообщение от Beltar Посмотреть сообщение
Ну выше было.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7818 / 4637 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
16.11.2023, 00:31
Цитата Сообщение от krapotkin Посмотреть сообщение
Из правда очень классного - многострочные литералы
Только выглядят чутка иначе:
Delphi
1
2
3
4
5
6
aaa := '''
2341234
dghdfghdfgh
dfghdfghdfgh
dfhdfgh
''';
The language adds support for multiline strings. A multiline string is introduced by a triple quote (’’’) and a new line, can spawn multiple lines of the source code, and ends with a closing triple quote (’’’) in a line without any text preceding it. Notice that having additional text beyond the triple quote on the first line is invalid. What’s significant is that there is no need to concatenate the lines into single-line strings with a + sign, as in the past.
https://docwiki.embarcadero.co... g_Literals
1
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
16.11.2023, 21:34
Цитата Сообщение от Verevkin Посмотреть сообщение
я уже пробую свежачок
Там можно рулить Processor Groups в 11 винде когда ядер больше 64 прям сразу из кода, без внешних библиотек?
Они обещали
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
16.11.2023, 21:38
Цитата Сообщение от Иван Ежик Посмотреть сообщение
Там можно рулить Processor Groups в 11 винде когда ядер больше 64 прям сразу из кода, без внешних библиотек?
Не знаю.
Цитата Сообщение от Иван Ежик Посмотреть сообщение
Они обещали
Вот с них и спрашивай.Чо я-то сразу?
0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
16.11.2023, 21:48
Цитата Сообщение от Verevkin Посмотреть сообщение
Вот с них и спрашивай.Чо я-то сразу?

Не по теме:

Это надо гдето регаться, искать поддержку, писать туда
А ты вот рядом уже на W11 сидишь и среду новую накатил, поэтому у тебя спросил )


А ваще в releaseNotes поддержка W11 ими заявлена ,а эта фича как раз в ней и появилась.
Миниатюры
Переношу процедуры в отдельный модуль подскажите по структуре  
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,856
16.11.2023, 22:00
Цитата Сообщение от Иван Ежик Посмотреть сообщение
А ты вот рядом уже на W11 сидишь и среду новую накатил, поэтому у тебя спросил )
У меня меньше 64 ядер.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
16.11.2023, 22:08

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
У меня меньше 64 ядер.
Нищеброд!


0
57 / 52 / 5
Регистрация: 18.11.2018
Сообщений: 295
16.11.2023, 22:10
Цитата Сообщение от Verevkin Посмотреть сообщение
У меня меньше 64 ядер.

Не по теме:

Жаль что в однопроцессорном сегменте в ближайшее время не предвидится.
Ну кроме Тредриппера с 96 ядер ценой пару лямов или поделий ARM архитектуры под которые винду завели но дров нету, зато ядер 128 ажно.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2023, 22:10

оформите в отдельный модуль
Помогите пожалуйста решить.. Пользователь вводит два натуральных числа. Составьте массив из простых чисел, лежащих между ними. Найдите...

Сформировать отдельный модуль
Сформировать отдельный модуль, содержащий описание процедур Min и Max, определяющих номер и значение элемента одномерного массива,...

сформировать отдельный модуль
сформировать отдельный модуль,содержащий описание трех подпрограмм, реализирующих умножение матриц размерности 3*3,умножение матрицы на...

Сформировать отдельный модуль pascal
Сформировать отдельный модуль, содержащий описание функции Сompress(S) строкового типа, выполняющей сжатие исходной строки S по следующему...

Вынос переменных в отдельный модуль
Здравствуйте, у меня появился вопрос... Можно ли технически вынести переменные программы в отдельный модуль и сделать так, чтоб они были...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru