Задать вопрос экспертам!

Эксперты раздела Delphi Смотреть всех

Вопросы раздела Delphi

Не как ни пойма чем они отличаются

Думаю вопрос ясен, мне нужно чтоб нельзя было писать и стирать в RichEdit. Спасибо)

Изображение услуги

Написание программы/скрипта

Услуга по написанию любой простой программы/скрипта на
C/C++/Pascal/PHP/Java/JavaScript (до 30 строк кода).

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

Желательно по подробней, т.к я не ас по делфи))) Буду очень признателен если поможети!))

Изображение услуги

Консультация по разработке

Часовая консультация по вопросам разработки или доработки сайта, нового IT-проекта или по вопросам разработки программного обеспечения.
Сообщите по какой теме Вам требуется консультация, чтобы эксперт мог (при необходимости) провести предварительную подготовку.

У меня 2 вопроса: 1)У меня например есть определенная папка с картинками и мне нужно чтобы при нажатие на кнопку открывалась картинка и я мог переключать между ними посредствои действий Вперед и Назад. Так вот как такое реализовать?! 2) Как сделать тоже самое только на клавиши клавиатуры.

Желательно с кодом т.к в делфи занялся совсем недавно. Спасибо))

Найти все двузначные числа, сумма квадратов цифр которых делится на 17 delphi 7 ( на компонентах spinedit1 edit1 bitbtn)....
пожалуйста поподробностей обьяснить.... 

Желательно подробнее, так как я делфи не особо знаю

Как сделать определенный компонент в делфи не активным, например label, а уже при нажатии кнопки label вновь стал активным и смог выполнять свои действия?

В ADOQuery нет свойства Mastersource, как связать три таблицы? Одна их них главная с ключевым полем Ключ, а две остальные таблицы подчиненные. В каждой из этих таблиц есть ключевое поле Товар.
Действие должно быть такое: например пользователь щёлкает на записи в таб.1, а данные этой записи отображаются в табл.2

вычислить значение выражения по формуле e^x-x-2+(1+x)^2.В делфи, все переменные принимают действительные значения

197. Разложить число на простые множители.как решить в лазарусе

Здравствуйте, начал делать браузер в делфи и возникла проблема, как создать вкладки с помощью компонента PageControl. Желательно как можно подробней, так как не очень хорошо разбираюсь в делфи.

Добрый вечер. Очень нужна программа на делфи “шифрование RC2 с созданием ЭЦП по алгоритму DSA” для текстового сообщения. Т е программа должна подписывать сообщение, верифицировать подпись, шифровать и расшифровывать сообщение. Обязательно в Delphi, а то мне будет сложно разобраться в коде. Времени мало у меня осталось, помогите, пожалуйста. Пойдет любая часть задания даже, пусть только шифрование или создание sha1(хэширование). Уменя просто несколько программ на завтра, затянул последний зачет((( делаю сейчас то, что точно хорошо знаю, а вот с криптографией не сталкивался, вот и решил попросить помощи по ней

procedure TForm6.Button1Click(Sender: TObject);
Label lb1;
var i,a,b:integer;
key:char;
begin
ShowMessage('Privet parthner!'+#13+'Я рад, что вы состязаетесь со мной!'
+#13+#13+'Отгадайте мое любимое число!'+#13+'Для справки: оно меньше тысячи.');
lb1: Randomize;
b:=Random(1000);
i:=0;
a:=Round(StrToFloat(InputBox('Ввод числа','Введите число','')));
Repeat
if a<b then a:=Round(StrToInt(InputBox('Ввод числа','Больше','')));
if a>b then a:=Round(StrToInt(InputBox('Ввод числа','Меньше','')));
i:=i+1;
if not (key in ['A'..'Z']) then begin ShowMessage('Только цифры!');
end;
until a=b;
case i of
1..9:ShowMessage('Это случайность!');
10:ShowMessage('Чудесно!');
11,12:ShowMessage('Очень хорошо!');
13,14:ShowMessage('Посредственно!');
else ShowMessage('Удачно!');
end;
If MessageDlg('Сыграем еще?',mtInformation,[mbYes,mbNO],0)=mrYes
then goto lb1;
ShowMessage('Пока.');
end;

end.

Необходимо вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x изменяющихся от xn до xk с шагом h=(xk-xn)/n. Близость значений S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x).
Задание приложила, вариант 12 и 14 изображение из вопроса

У меня есть плейр, и оболочка, и внем при нажатие например на кнопку открывается видео, так вот какой код нужен чтоб при нажатие на кнопку видео открывалось на весь экран? Видео воспроизводится на панеле.

DSPack. расскажите о установке компонента DSPack. в обычной инструкции по установке сказано "___ 1) Итак, распаковываем скаченный архив, заходим в папочку packages и копируем все от туда в: «папка куда установлена delphi\lib» и в projects\bpl. ___" я понятия не имею где эта папка -> "__«папка куда установлена delphi\lib» и в projects\bpl. "__" помогите пожалуйста вот если что вся интрукцыя котороямне сказана: "____________ 1) Итак, распаковываем скаченный архив, заходим в папочку packages и копируем все от туда в: «папка куда установлена delphi\lib» и в projects\bpl. 2) Так теперь нужно не нарушая последовательности по очереди запустить следующие файлы: 3) DirectX9_D7.dpk — при возникновении каких либо ошибок не обращаем на них внимания, далее вылезет маленькое, окошечко в котором нужно нажать Compile, я подчеркиваю жмем только Compile, Instal жать не нужно. 4) Так идем дальше запускаем DSPack_D7.dpk (возможно появиться запрос на сохранение изменений отвечаем Yes) и опять если после запуска появляется ошибка закрываем глаза не неё, в маленьком окошечке нажимаем только Compile. 5) И наконец запускаем третий файл DSPackDesign_D7.dpk — теперь уже нажимаем Compile, затем Instal. ______________"

Мне нужно чтобы при воспроизведении видео в MediaPlayer, trackbar двигался паралельно с видео. Немогу ни как связать. Если есть другие варианты, то можно и другие, лишь бы работало. Заранее спасибо.

Здравствуйте.

У меня такой вопрос: как использовать формулу для вычисления, введенную в TEdit?

Например я ввожу в поле Edit 'sin(x)' в другой Edit значение X и мне соответственно нужно программно извлечь формулу из edit'а, либо посчитать значение в нём… Подскажите как это реализовать?

Заранее благодарен

Дан динамический массив символов. Вставить после каждого символа символ ‘/’.
(Просьба, обязательные компоненты edit1 (введите эл массива), StringGrid1 StringGrid2, BitBtn1(Вывод исходного массива) BitBtn2(вывод результата) )

вот пример:

Дан динамический массив целых чисел. Вставить после каждого элемента массива нулевой элемент. 

unit Unit2;

interface

 uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls, Grids, Buttons;

 

type

  TForm2 = class(TForm)

    Label1: TLabel;

    Edit1: TEdit;

    BitBtn1: TBitBtn;

    BitBtn2: TBitBtn;

    StringGrid1: TStringGrid;

    StringGrid2:TStringGrid;

    Memo1: TMemo;

    BitBtn3: TBitBtn;

    procedure Edit1KeyPress(Sender: TObject; var Key:Char);

    procedure BitBtn1Click(Sender: TObject);

    procedure BitBtn2Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure BitBtn3Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 var

  Form2: TForm2;

 

implementation 

{$R *.DFM}

 var

   a:array of integer;

 

procedure TForm2.FormCreate(Sender: TObject);

begin

   setlength(a,0);

end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

   if key=#13 then

                 begin

                    setlength(a,length(a)+1);

                    a[length(a)-1]:=strtoint(edit1.text);

                    edit1.text:='';

                 end;

end;

 

procedure TForm2.BitBtn1Click(Sender: TObject);

  var

    i:integer;

begin

   stringgrid1.ColCount:=length(a);

   for i:=0 to length(a) do

    stringgrid1.Cells[i,0]:=inttostr(a[i]);

end;

 

procedure TForm2.BitBtn2Click(Sender: TObject);

  var

     n,i,k:integer;

begin

 

 

   n:=length(a)-1;

   setlength(a,length(a)+length(a)-1);

   k:=length(a)-1;

   for i:=n downto 1 do

    begin

       a[k]:=a[i];

       a[i]:=0;

       k:=k-2;

    end;

    stringgrid2.ColCount:=length(a);

   for i:=0 to length(a)-1 do

     stringgrid2.cells[i,0]:=inttostr(a[i]);

end;

 end.

Очень нужен jsWebBrowser.pas и его ресурс jquery.res для работы с javascript в Delphi Webbrowser. Все ссылки, которые нашел, битые Помогите найти или поделитесь, у кого есть

Создаю VCL приложение, в котором с помощью REST компонентов намереваюсь получить доступ к Dropbox

Успешно создал api-приложение на сайте разработчиков Dropbox, на форме моей программы авторизируюсь и получаю access_token.

Дальше пытаюсь скачать файл, но не получается правильно составить запрос

Вот моя попытка

изображение из вопроса

В документации сказано запрос составлять так

https://www.dropbox.com/developers/documentation/http/documentation#files-download

При попытке выполнить срабатывает исключение «400 Bad Request»

В чем ошибка?

Здравствуйте, у меня такой вопрос, я хочу сделать приложение про отличия в картинках, и чтоб к примеру при нахождении отличия и при нажатии, выводилось сообщение что 1 отличе найдено. Прошу кто чем поможет

Здравствуйте!
У меня вопрос по работе с сетью в Delphi

С помощью REST library (с которой знаком поверхностно) подключаюсь к google drive api

в OAuth2Authenticator-е успешно получил Access и Refresh token-ы

пытаюсь обновить AccesToken так, как на фото
изображение из вопроса
получаю исключение
ETHTTPProtocolException with message 'HTTP/1.1 404 not found'

Видимо неправильно составил запрос
Но параметры добавлял все те, которые указаны в документации google
https://developers.google.com/identity/protocols/OAuth2WebServer
(Пункт Refreshing an access token (offline access))

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

Дана задача

На форме находятся 3 обьекта: edit1,edit2 и button1.

Нужно, чтобы после ввода строки в edit1 и клике на кнопку button1, в edit2 появлялась эта же строка, только перевернутая

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

1. возможно ли передавать и приниматькоманды на прямую без участья каких либо программ (посредник) на хостинге?

2. если обязательно требуется программа на хостинге то как реализовать эту систему?

Вообщем нужно сделать так чтобы 2 или несколько компьютеров общались друг сдругом по командам, а еще хостинг у меня на Linux-е. Заране благодарен. 

Добрый вечер. Я решил сделать игрушку на подобие героев меча и магии 3 с 2д графикой, но со своей спецификой. Подскажите как правильно организовать саму пошаговую битву? Я сам пытался создавать алгоритмы, но они иногда неправильно работают и к тому же требуют хранения большого количества информации. Я придумал массив отрядов игроков. В каждом отряде 11 ячеек с информацией о расположенныхв них монстров. В нулевой ячейке хранится информация о герое отряда если таковой есть в отряде. В битве встречаются два отряда соперников. Главная проблема это расположить монстров и героев в очереди опираясь на их характеристику «приоритет». А затем все по очереди должны ходить и бить по соседним клеткам с монстрами соперников. А летающие монстры могут перелетать через ограды, которые могут быть на карте битвы. Все монстры занимают различное количество клеток (ширина, длина и высота). Вот как это хранить правильно, чтобы изменялась непроходимость участка с монстрами разной величины и правильно искать путь для летающих монстров через преграды — я пока не придумал. Буду благодарен за любую информацию: советы, ссылки на статьи, алгоритмы и тд. Заранее спасибо всем.

и кодировка там китайская, как я понял. Я с помощью программы ResHacker переводил CAPTION но при нажатии кнопки должна открываться форма того длл файла, этого не происходит. Менял Китайские символы на Русские
предупреждал он стал курить спайс который почти не пахнет. Что делать? Если обратиться в полицию там помогут? или просто заявление примут и все? Отправят ли этого человека на медэкспертизу?
следующие свойства:  Размер формы: ширина – 700 пикселей, высота – 500 пикселей.  Заголовок формы – Лабораторная работа № 8.  Для предотвращения изменения размера окна указанные размеры задать в свойстве Constraints формы. 3. С использованием компонентов сконструировать интерфейс программы. Форма должна включать элемент управления PageControl на две вкладки. В каждую вкладку добавить табличную структуру StringGrid из 7 столбцов и 11 строк. Число фиксированных строк – 1, фиксированных столбцов – 0. Заголовки столбцов необходимо прочитать из внешнего текстового файла. Структура этого файла – 7 строк с наименованиями столбцов. Чтение заголовков для столбцов выполнить однократно и присвоить строки с именами столбцов каждой таблице. В данном примере чтение заголовков таблиц происходит из файла с псевдонимом fHead в цикле до m = 6. Параметр цикла i является счѐтчиком столбцов. Для присвоения ячейкам нулевой строки значения считанного из файла заголовка используется промежуточный одномерный строковый массив Head[0..m]. //Блок чтения заголовков таблиц из внешнего файла //и присвоения строковых значений всем ячейкам нулевой строки for i := 0 to m do begin ReadLN(fHead, Head[i]); StringGrid1.Cells[i,0]:=Head[i]; StringGrid2.Cells[i,0]:=Head[i]; end; 7 Заполнение таблицы в первой вкладке должно происходить программно данными, считанными из внешнего текстового файла. Текстовый файл должен иметь структуру, соответствующую столбцам 1–й таблицы. Данные для одной строки (7 полей) должны быть записаны в 7 последовательных строк. Например, для данной таблицы первые семь строк текстового файла Data.txt имеют вид: 1 Иванов Пѐтр Сергеевич 18.05.1958 Главный инженер 16000 Для использования в 1–й таблице данных о 10 сотрудниках необходимо ввести 70 строк. Чтение из файла происходит построчно. Для данной задачи чтение может быть выполнено следующим образом: AssignFile (fData, 'Data.txt'); Reset(fData); for i := 1 to n do for j := 0 to m do begin Readln(fData, S[j, i]); StringGrid1.Cells[j,i] := S[j, i]; end; CloseFile(fData); Чтение заголовков таблиц, данных для заполнения 1–й таблицы должно происходить при загрузке программы. 8 4. Вторая вкладка должна содержать таблицу того же размера, что в 1–я таблица. Данные во 2–й таблице необходимо заполнить самостоятельно и вывести во внешний файл построчно в том же формате, что и для файла исходных данных. Например, при выгрузке заполненных данных в текстовый файл в нѐм последовательно для первой записи таблицы должны быть сформированы строки: 1 Рузаев Дмитрий Александрович 12.04.1973 Инженер-проектировщик 18000 Для редактирования 2–й таблицы в свойствах компонента StringGrid необходимо следующим параметрам задать значение True: goEditing – для возможности редактирования ячеек таблицы, goTabs – для возможности перехода по таблице клавишей Tab при заполнении таблицы по строкам, goColSizing – для возможности изменять ширину столбцов для удобства отображения данных. Этот параметр так же необходимо задать и в первой таблице. Таким образом, для начального этапа работы программы необходимо создать два текстовых файла – с наименованиями заголовков к таблицам и исходными данными для заполнения 1–й таблицы. Результатом работы программы должен быть текстовый файл с данными сотрудников Проектного отдела)

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

unit MainSklad;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, RzStatus, ExtCtrls, RzPanel, RzButton, ComCtrls, RzTreeVw,

RzPrgres, StdCtrls, Mask, RzEdit, RzDBEdit, Grids, DBGrids, RzLabel,

RzTabs, TFlatHintUnit, ImgList, RzGroupBar, RzCmboBx, RzRadChk, RzDBChk,

Menus, DBCtrls, RzDBNav;

type

TfmMainSklad = class(TForm)

RzGroupBar: TRzGroupBar;

RzGroupZayavki: TRzGroup;

RzGroupCreate: TRzGroup;

FlatHint: TFlatHint;

RzPageControl: TRzPageControl;

tsZayavka: TRzTabSheet;

tsZayavkiSnab: TRzTabSheet;

DBGridZayavki: TDBGrid;

tsTovars: TRzTabSheet;

RzLaProgress: TRzLabel;

RzProgressBar: TRzProgressBar;

RzTreeViewTovars: TRzTreeView;

RzBBRefresh: TRzBitBtn;

tsEmpty: TRzTabSheet;

ImageList1: TImageList;

RzCBOtdelNumber: TRzComboBox;

RzLabel13: TRzLabel;

RzBBAddGroup: TRzBitBtn;

RzBBAddTovar: TRzBitBtn;

RzEdFindTovar: TRzEdit;

RzBitBtnFind: TRzBitBtn;

RzLabel16: TRzLabel;

RzLabel17: TRzLabel;

RzLabel18: TRzLabel;

RzEdPrice: TRzEdit;

RzLabel14: TRzLabel;

RzEdCountTovar: TRzEdit;

RzEdCountry: TRzEdit;

RzEdEdIzm: TRzEdit;

RzStatusBar1: TRzStatusBar;

RzClockStatus: TRzClockStatus;

RzStatusDB: TRzStatusPane;

RzLaInfo: TRzLabel;

RzGroup3: TRzGroup;

RzBBDeleteTovar: TRzBitBtn;

RzPanel1: TRzPanel;

RzLabel1: TRzLabel;

RzDBEdit1: TRzDBEdit;

RzDBCheckBox1: TRzDBCheckBox;

RzLabel7: TRzLabel;

RzDBEdit7: TRzDBEdit;

RzDBCheckBox7: TRzDBCheckBox;

RzDBCheckBox8: TRzDBCheckBox;

RzDBEdit8: TRzDBEdit;

RzLabel8: TRzLabel;

RzDBCheckBox2: TRzDBCheckBox;

RzDBEdit2: TRzDBEdit;

RzLabel2: TRzLabel;

RzLabel3: TRzLabel;

RzDBEdit3: TRzDBEdit;

RzDBCheckBox3: TRzDBCheckBox;

RzLabel9: TRzLabel;

RzDBEdit9: TRzDBEdit;

RzDBCheckBox9: TRzDBCheckBox;

RzDBCheckBox10: TRzDBCheckBox;

RzDBEdit10: TRzDBEdit;

RzLabel10: TRzLabel;

RzDBCheckBox4: TRzDBCheckBox;

RzDBEdit4: TRzDBEdit;

RzLabel4: TRzLabel;

RzLabel5: TRzLabel;

RzDBEdit5: TRzDBEdit;

RzDBCheckBox5: TRzDBCheckBox;

RzLabel11: TRzLabel;

RzDBEdit11: TRzDBEdit;

RzDBCheckBox11: TRzDBCheckBox;

RzDBCheckBox12: TRzDBCheckBox;

RzDBEdit12: TRzDBEdit;

RzLabel12: TRzLabel;

RzDBCheckBox6: TRzDBCheckBox;

RzDBEdit6: TRzDBEdit;

RzLabel6: TRzLabel;

RzBBExpand: TRzBitBtn;

RzBBCollapse: TRzBitBtn;

DBGridZayavkiSnab: TDBGrid;

RzPanel2: TRzPanel;

RzLabel15: TRzLabel;

RzLabel19: TRzLabel;

RzLabel20: TRzLabel;

RzLabel21: TRzLabel;

RzLabel22: TRzLabel;

RzLabel23: TRzLabel;

RzLabel24: TRzLabel;

RzLabel25: TRzLabel;

RzLabel26: TRzLabel;

RzLabel27: TRzLabel;

RzLabel28: TRzLabel;

RzLabel29: TRzLabel;

RzDBEdit13: TRzDBEdit;

RzDBCheckBox13: TRzDBCheckBox;

RzDBEdit14: TRzDBEdit;

RzDBCheckBox14: TRzDBCheckBox;

RzDBCheckBox15: TRzDBCheckBox;

RzDBEdit15: TRzDBEdit;

RzDBCheckBox16: TRzDBCheckBox;

RzDBEdit16: TRzDBEdit;

RzDBEdit17: TRzDBEdit;

RzDBCheckBox17: TRzDBCheckBox;

RzDBEdit18: TRzDBEdit;

RzDBCheckBox18: TRzDBCheckBox;

RzDBCheckBox19: TRzDBCheckBox;

RzDBEdit19: TRzDBEdit;

RzDBCheckBox20: TRzDBCheckBox;

RzDBEdit20: TRzDBEdit;

RzDBEdit21: TRzDBEdit;

RzDBCheckBox21: TRzDBCheckBox;

RzDBEdit22: TRzDBEdit;

RzDBCheckBox22: TRzDBCheckBox;

RzDBCheckBox23: TRzDBCheckBox;

RzDBEdit23: TRzDBEdit;

RzDBCheckBox24: TRzDBCheckBox;

RzDBEdit24: TRzDBEdit;

RzDBNavigator1: TRzDBNavigator;

RzDBNavigator2: TRzDBNavigator;

RzLabel30: TRzLabel;

RzEdSchet: TRzEdit;

RzLaBanner: TRzLabel;

PopupMenu: TPopupMenu;

N1: TMenuItem;

RzMBPrint: TRzMenuButton;

RzLabel31: TRzLabel;

RzEdAllCount: TRzEdit;

N2: TMenuItem;

RzBBFindTovar: TRzBitBtn;

procedure RzGroupViewItems0Click(Sender: TObject);

procedure RzGroupViewItems1Click(Sender: TObject);

procedure RzBBRefreshClick(Sender: TObject);

procedure RzPageControlChange(Sender: TObject);

procedure FormResize(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure DBGridZayavkiDrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

procedure RzGroup2Items1Click(Sender: TObject);

procedure FormShow(Sender: TObject);

procedure RzCBOtdelNumberChange(Sender: TObject);

procedure RzBBAddGroupClick(Sender: TObject);

procedure RzEdFindTovarChange(Sender: TObject);

procedure RzBBAddTovarClick(Sender: TObject);

procedure RzTreeViewTovarsClick(Sender: TObject);

procedure SetDefaultValueComponents;

procedure RzTreeViewTovarsDblClick(Sender: TObject);

procedure RzGroup3Items0Click(Sender: TObject);

procedure RzGroup3Items1Click(Sender: TObject);

procedure RzGroup3Items2Click(Sender: TObject);

procedure RzGroup3Items3Click(Sender: TObject);

procedure RzBBCollapseClick(Sender: TObject);

procedure RzBBExpandClick(Sender: TObject);

procedure RzGroup1Items1Click(Sender: TObject);

procedure RzGroup1Items0Click(Sender: TObject);

procedure RzGroupZayavkiItems1Click(Sender: TObject);

procedure DBGridZayavkiSnabDrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

procedure RzGroupZayavkiItems2Click(Sender: TObject);

procedure RzGroupCreateItems1Click(Sender: TObject);

procedure RzGroup3Items4Click(Sender: TObject);

procedure RzGroupCreateItems0Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure RzGroupCreateItems6Click(Sender: TObject);

procedure RzMBPrintClick(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure RzBBFindTovarClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

fmMainSklad: TfmMainSklad;

implementation

uses Store, SQLConst, KartochkaTovara, NewTovarGroup, NewTovar, DB, EdIzm,

Otdels, Sotrudniki, Country, TrebovanieOut, KnigaOut, ZayavkaSnab,

OrderIn, Postavshiki, KnigaIn, ReportInvent, ReportZayavkaF2;

{$R *.dfm}

procedure TfmMainSklad.RzGroupViewItems0Click(Sender: TObject);

begin

RzCBOtdelNumber.ClearSelection;

with dmStore do

begin

RzCBOtdelNumber.Text:='';

IBQZayavki.SQL.Clear;

IBQZayavki.SQL.Add(Get_List_Zayavka_With_TovarInfo);

IBQZayavki.SQL.Add('ORDER BY USERS.NAMEOTD, ZAYAVKAF1.DATEZAYAVKA');

IBQZayavki.Open;

RzPageControl.ActivePage:=tsZayavka;

DBGridZayavki.SetFocus;

end;

end;

procedure TfmMainSklad.RzGroupViewItems1Click(Sender: TObject);

var

ParentNode, ChildNode:TTreeNode;

i:integer;

ShowBanner:boolean;

begin

if not ListTovarLoaded then

with dmStore do

begin

ListTovarLoaded:=true;

ListDetailTovar.Clear;

RzPageControl.ActivePage:=tsTovars;

RzTreeViewTovars.Visible:=false;

RzBBRefresh.Visible:=false;

RzBBExpand.Visible:=false;

RzBBCollapse.Visible:=false;

RzLaProgress.Visible:=true;

RzProgressBar.Visible:=true;

Application.ProcessMessages;

RzTreeViewTovars.Items.Clear;

IBQTovar.SQL.Clear;

IBQTovar.SQL.Add('SELECT COUNT( TOVAR.IDTOVAR ) COUNT_OF_IDTOVAR FROM TOVAR');

IBQTovar.Open;

RzProgressBar.TotalParts:=IBQTovar.FieldByName('COUNT_OF_IDTOVAR').AsInteger;

RzProgressBar.PartsComplete:=0;

IBQGroupTovar.SQL.Clear;

IBQGroupTovar.SQL.Add(Get_List_GroupTovar);

IBQGroupTovar.SQL.Add('ORDER BY GROUPTOVAR.IDGROUP');

IBQGroupTovar.Open;

IBQGroupTovar.First;

while not IBQGroupTovar.Eof do

begin

IBQTovar.SQL.Clear;

IBQTovar.SQL.Add(Get_List_Tovar_small);

IBQTovar.SQL.Add('WHERE TOVAR.IDGROUP = '+IntToStr(IBQGroupTovar.FieldByName('IDGROUP').AsInteger));

IBQTovar.Open;

ParentNode:=RzTreeViewTovars.Items.Add(nil,Trim(IBQGroupTovar.FieldByName('NAMEGROUP').AsString));

ParentNode.StateIndex:=4;

IBQTovar.First;

while not IBQTovar.Eof do

begin

New(DetailTovarInfo);

DetailTovarInfo.ID:=IBQTovar.FieldByName('IDTOVAR').AsInteger;

DetailTovarInfo.NameTovar:=IBQTovar.FieldByName('NAMETOVAR').AsString;

DetailTovarInfo.Country:=Trim(IBQTovar.FieldByName('NAMECOUNTRY').AsString);

DetailTovarInfo.EdIzm:=Trim(IBQTovar.FieldByName('NAMEEDIZM').AsString);

DetailTovarInfo.Price:=IBQTovar.FieldByName('PRICE').AsFloat;

DetailTovarInfo.Ostatok:=IBQTovar.FieldByName('COUNTTOV').AsFloat;

DetailTovarInfo.Schet:=IBQTovar.FieldByName('SCHET').AsInteger;

DetailTovarInfo.ClientsAdd:=IBQTovar.FieldByName('CLIENTSADD').AsInteger;

ChildNode:=RzTreeViewTovars.Items.AddChild(ParentNode,Trim(IBQTovar.FieldByName('NAMETOVAR').AsString));

ChildNode.StateIndex:=5;

ChildNode.Data:=DetailTovarInfo;

ListDetailTovar.Add(DetailTovarInfo);

RzProgressBar.IncPartsByOne;

IBQTovar.Next;

end;

IBQGroupTovar.Next;

end;

ShowBanner:=false;

for i:=0 to ListDetailTovar.Count-1 do

if PDetailTovarInfo(ListDetailTovar.Items[i]).ClientsAdd=1 then ShowBanner:=true;

RzLaBanner.Visible:=ShowBanner;

RzBBFindTovar.Visible:=ShowBanner;

RzTreeViewTovars.Visible:=true;

RzBBRefresh.Visible:=true;

RzBBExpand.Visible:=true;

RzBBCollapse.Visible:=true;

RzLaProgress.Visible:=false;

RzProgressBar.Visible:=false;

end;

if RzPageControl.ActivePage<>tsTovars then RzPageControl.ActivePage:=tsTovars;

RzTreeViewTovars.SortType:=stNone;

RzTreeViewTovars.SortType:=stText;

RzTreeViewTovars.SetFocus;

end;

procedure TfmMainSklad.RzBBRefreshClick(Sender: TObject);

begin

ListTovarLoaded:=false;

RzGroupViewItems1Click(Sender);

SetDefaultValueComponents;

end;

procedure TfmMainSklad.RzPageControlChange(Sender: TObject);

begin

RzCBOtdelNumber.ClearSelection;

if RzPageControl.ActivePage=tsZayavka then RzGroupViewItems0Click(Sender);

if RzPageControl.ActivePage=tsTovars then RzGroupViewItems1Click(Sender);

if RzPageControl.ActivePage=tsZayavkiSnab then RzGroupZayavkiItems1Click(Sender);

end;

procedure TfmMainSklad.FormResize(Sender: TObject);

begin

DBGridZayavki.Columns.Items[3].Width:=fmMainSklad.Width-620;

DBGridZayavkiSnab.Columns.Items[2].Width:=fmMainSklad.Width-508;

end;

procedure TfmMainSklad.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

if NameOtdela<>'' then

begin

if not dmStore.IBQUsers.Transaction.InTransaction then

dmStore.IBQUsers.Transaction.StartTransaction;

dmStore.IBQUsers.SQL.Clear;

dmStore.IBQUsers.SQL.Add('UPDATE USERS SET STATEOTDELA=0 WHERE NAMEOTD='+NameOtdela);

dmStore.IBQUsers.ExecSQL;

dmStore.IBQUsers.Active:=false;

dmStore.IBQUsers.Transaction.Commit;

end;

end;

procedure TfmMainSklad.DBGridZayavkiDrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

var

Pos:TPoint;

i:integer;

Res:array [1..12] of boolean;

MayDraw:boolean;

begin

if (dmStore.IBQZayavki.FieldByName('COUNTTOV').AsFloat<dmStore.IBQZayavki.FieldByName('COUNTTOVAR').AsFloat) and not (gdSelected in State) then

begin

DBGridZayavki.Canvas.Brush.Color:=$00B5AEFF;

DBGridZayavki.Canvas.FillRect(Rect);

DBGridZayavki.DefaultDrawColumnCell(Rect,DataCol,Column,State);

end;

if DataCol=0 then

begin

Pos.X:=Rect.Left+Trunc((Rect.Right-Rect.Left-DBGridZayavki.Canvas.TextWidth(IntToStr(dmStore.IBQZayavki.RecNo)))/2);

Pos.Y:=Rect.Top+Trunc((Rect.Bottom-Rect.Top-DBGridZayavki.Canvas.TextHeight(IntToStr(dmStore.IBQZayavki.RecNo)))/2);

if dmStore.IBQZayavki.RecordCount>0 then

DBGridZayavki.Canvas.TextOut(Pos.X,Pos.Y,IntToStr(dmStore.IBQZayavki.RecNo))

end;

if DataCol=6 then

begin

Pos.X:=Rect.Left+Trunc((Rect.Right-Rect.Left-16)/2);

Pos.Y:=Rect.Top+Trunc((Rect.Bottom-Rect.Top-16)/2);

for i:=1 to 12 do Res[i]:=false;

for i:=1 to 12 do

begin

if ((dmStore.IBQZayavki.FieldByName('M'+IntToStr(i)+'STATE').AsInteger=1)

and (dmStore.IBQZayavki.FieldByName('M'+IntToStr(i)).AsInteger<>0)) then Res[i]:=true;

if ((dmStore.IBQZayavki.FieldByName('M'+IntToStr(i)+'STATE').AsInteger=0)

and (dmStore.IBQZayavki.FieldByName('M'+IntToStr(i)).AsInteger=0)) then Res[i]:=true;

end;

MayDraw:=True;

for i:=1 to 12 do if Res[i]=false then MayDraw:=false;

if MayDraw then

ImageList1.Draw(DBGridZayavki.Canvas,Pos.X,Pos.Y,3);

end;

end;

procedure TfmMainSklad.RzGroup2Items1Click(Sender: TObject);

begin

fmKartochka.Show;

end;

procedure TfmMainSklad.FormShow(Sender: TObject);

begin

with dmStore do

begin

RzCBOtdelNumber.ClearItems;

IBQUsers.SQL.Clear;

IBQUsers.SQL.Add('SELECT USERS.IDOTDELA, USERS.NAMEOTD FROM USERS');

IBQUsers.SQL.Add('ORDER BY USERS.NAMEOTD');

IBQUsers.Open;

IBQUsers.First;

RzCBOtdelNumber.Items.Add('Всеотделы');

while not IBQUsers.Eof do

begin

RzCBOtdelNumber.Items.Add(Trim(IBQUsers.FieldByName('NAMEOTD').AsString));

IBQUsers.Next;

end;

end;

end;

procedure TfmMainSklad.RzCBOtdelNumberChange(Sender: TObject);

var

IDOtdela:integer;

begin

if RzCBOtdelNumber.Text<>'' then

begin

if RzCBOtdelNumber.Text<>'Всеотделы' then

with dmStore do

begin

IBQUsers.SQL.Clear;

IBQUsers.SQL.Add('SELECT USERS.IDOTDELA, USERS.NAMEOTD FROM USERS');

IBQUsers.SQL.Add('WHERE USERS.NAMEOTD = '''+RzCBOtdelNumber.Text+'''');

IBQUsers.Open;

IDOtdela:=IBQUsers.FieldByName('IDOTDELA').AsInteger;

IBQZayavki.SQL.Clear;

IBQZayavki.SQL.Add(Get_List_Zayavka_With_TovarInfo);

IBQZayavki.SQL.Add('WHERE ZAYAVKAF1.IDUSER = '''+IntToStr(IDOtdela)+'''');

IBQZayavki.SQL.Add('ORDER BY ZAYAVKAF1.DATEZAYAVKA');

IBQZayavki.Open;

end

else

RzGroupViewItems0Click(Sender);

end;

end;

procedure TfmMainSklad.RzBBAddGroupClick(Sender: TObject);

begin

fmNewTovarGroup.Show;

end;

procedure TfmMainSklad.RzEdFindTovarChange(Sender: TObject);

var

i:integer;

begin

if RzTreeViewTovars.Items.Count>0 then

for i:=0 to RzTreeViewTovars.Items.Count-1 do

begin

if Pos(AnsiUpperCase(RzEdFindTovar.Text),AnsiUpperCase(RzTreeViewTovars.Items.Item[i].Text))>0 then

begin

RzTreeViewTovars.Select(RzTreeViewTovars.Items.Item[i], [ssLeft]);

RzTreeViewTovarsClick(Sender);

Exit;

end;

end;

end;

procedure TfmMainSklad.RzBBAddTovarClick(Sender: TObject);

begin

KindAction:=kaNewTovar;

fmNewTovar.Caption:='Созданиеновоготовара';

fmNewTovar.RzCBCountryTovar.Style:=csDropDownList;

fmNewTovar.RzCBEdIzm.Style:=csDropDownList;

fmNewTovar.RzCBGroupTovar.Style:=csDropDownList;

fmNewTovar.RzCBGroupTovar.Enabled:=true;

fmNewTovar.RzBBAddNewGroupTovar.Enabled:=true;

fmNewTovar.RzCBEdIzm.Enabled:=true;

fmNewTovar.Show;

end;

procedure TfmMainSklad.RzTreeViewTovarsClick(Sender: TObject);

var

SelectedNode:TTreeNode;

begin

RzLaInfo.Visible:=false;

SelectedNode:=RzTreeViewTovars.Selected;

if SelectedNode<>nil then

begin

if SelectedNode.Parent<>nil then

begin

DetailTovarInfo:=SelectedNode.Data;

RzEdSchet.Text:=IntToStr(DetailTovarInfo.Schet);

RzEdCountTovar.Text:=FloatToStr(DetailTovarInfo.Ostatok);

RzEdEdIzm.Text:=DetailTovarInfo.EdIzm;

RzEdCountry.Text:=DetailTovarInfo.Country;

RzEdPrice.Text:=FloatToStr(DetailTovarInfo.Price);

if DetailTovarInfo.ClientsAdd=1 then RzLaInfo.Visible:=true;

end

else

SetDefaultValueComponents;

end;

end;

procedure TfmMainSklad.SetDefaultValueComponents;

begin

RzEdCountry.Text:='';

RzEdEdIzm.Text:='';

RzEdPrice.Text:='';

RzEdCountTovar.Text:='';

RzEdSchet.Text:='';

end;

procedure TfmMainSklad.RzTreeViewTovarsDblClick(Sender: TObject);

var

SelectedNode:TTreeNode;

begin

RzLaInfo.Visible:=false;

SelectedNode:=RzTreeViewTovars.Selected;

if SelectedNode<>nil then

begin

if SelectedNode.Parent<>nil then

begin

KindAction:=kaEditTovar;

DetailTovarInfo:=SelectedNode.Data;

fmNewTovar.RzCBCountryTovar.Style:=csDropDown;

fmNewTovar.RzCBEdIzm.Style:=csDropDown;

fmNewTovar.RzCBGroupTovar.Style:=csDropDown;

fmNewTovar.RzCBGroupTovar.Enabled:=false;

fmNewTovar.RzBBAddNewGroupTovar.Enabled:=false;

fmNewTovar.RzCBGroupTovar.Text:=SelectedNode.Parent.Text;

fmNewTovar.RzCBEdIzm.Text:=DetailTovarInfo.EdIzm;

fmNewTovar.RzCBEdIzm.Enabled:=false;

fmNewTovar.RzEdNameTovar.Text:=SelectedNode.Text;

fmNewTovar.Tag:=DetailTovarInfo.ID;

fmNewTovar.RzEdSchet.Text:=IntToStr(DetailTovarInfo.Schet);

fmNewTovar.RzEdCount.Text:=FloatToStr(DetailTovarInfo.Ostatok);

if DetailTovarInfo.Country<>'' then fmNewTovar.RzCBCountryTovar.Text:=DetailTovarInfo.Country;

if DetailTovarInfo.Price<>0 then fmNewTovar.RzEdPrice.Text:=FloatToStr(DetailTovarInfo.Price);

fmNewTovar.Caption:='Редактирование свойств товара';

fmNewTovar.Show;

//RzEdCountTovar.Text:=FloatToStr(DetailTovarInfo.Ostatok);

RzEdEdIzm.Text:=DetailTovarInfo.EdIzm;

RzEdCountry.Text:=DetailTovarInfo.Country;

RzEdPrice.Text:=FloatToStr(DetailTovarInfo.Price);

if DetailTovarInfo.ClientsAdd=1 then RzLaInfo.Visible:=true;

end

else

SetDefaultValueComponents;

end;

end;

procedure TfmMainSklad.RzGroup3Items0Click(Sender: TObject);

begin

fmEdIzm.Show;

end;

procedure TfmMainSklad.RzGroup3Items1Click(Sender: TObject);

begin

fmOtdels.Show;

end;

procedure TfmMainSklad.RzGroup3Items2Click(Sender: TObject);

begin

fmSotrudniki.Show;

end;

procedure TfmMainSklad.RzGroup3Items3Click(Sender: TObject);

begin

fmCountry.Show;

end;

procedure TfmMainSklad.RzBBCollapseClick(Sender: TObject);

begin

RzTreeViewTovars.FullCollapse;

SetDefaultValueComponents;

end;

procedure TfmMainSklad.RzBBExpandClick(Sender: TObject);

begin

RzTreeViewTovars.FullExpand;

SetDefaultValueComponents;

end;

procedure TfmMainSklad.RzGroup1Items1Click(Sender: TObject);

begin

TrebovanieAction:=taNew;

fmTrebovanieOut.Show;

end;

procedure TfmMainSklad.RzGroup1Items0Click(Sender: TObject);

begin

fmKnigaOut.Show;

end;

procedure TfmMainSklad.RzGroupZayavkiItems1Click(Sender: TObject);

begin

with dmStore do

begin

IBQZayavkiF2.SQL.Clear;

IBQZayavkiF2.SQL.Add(Get_List_ZayavkaF2_With_TovarInfo);

IBQZayavkiF2.SQL.Add('ORDER BY ZAYAVKAF2.DATEZAYAVKAF2');

IBQZayavkiF2.Open;

RzPageControl.ActivePage:=tsZayavkiSnab;

DBGridZayavkiSnab.SetFocus;

end;

end;

procedure TfmMainSklad.DBGridZayavkiSnabDrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

var

Pos:TPoint;

i:integer;

Res:array [1..12] of boolean;

MayDraw:boolean;

begin

if DataCol=0 then

begin

Pos.X:=Rect.Left+Trunc((Rect.Right-Rect.Left-DBGridZayavkiSnab.Canvas.TextWidth(IntToStr(dmStore.IBQZayavkiF2.RecNo)))/2);

Pos.Y:=Rect.Top+Trunc((Rect.Bottom-Rect.Top-DBGridZayavkiSnab.Canvas.TextHeight(IntToStr(dmStore.IBQZayavkiF2.RecNo)))/2);

if dmStore.IBQZayavkiF2.RecordCount>0 then

DBGridZayavkiSnab.Canvas.TextOut(Pos.X,Pos.Y,IntToStr(dmStore.IBQZayavkiF2.RecNo))

end;

if DataCol=5 then

begin

Pos.X:=Rect.Left+Trunc((Rect.Right-Rect.Left-16)/2);

Pos.Y:=Rect.Top+Trunc((Rect.Bottom-Rect.Top-16)/2);

for i:=1 to 12 do Res[i]:=false;

for i:=1 to 12 do

begin

if ((dmStore.IBQZayavkiF2.FieldByName('M'+IntToStr(i)+'STATE').AsInteger=1)

and (dmStore.IBQZayavkiF2.FieldByName('M'+IntToStr(i)).AsInteger<>0)) then Res[i]:=true;

if ((dmStore.IBQZayavkiF2.FieldByName('M'+IntToStr(i)+'STATE').AsInteger=0)

and (dmStore.IBQZayavkiF2.FieldByName('M'+IntToStr(i)).AsInteger=0)) then Res[i]:=true;

end;

MayDraw:=True;

for i:=1 to 12 do if Res[i]=false then MayDraw:=false;

if MayDraw then

ImageList1.Draw(DBGridZayavkiSnab.Canvas,Pos.X,Pos.Y,3);

end;

end;

procedure TfmMainSklad.RzGroupZayavkiItems2Click(Sender: TObject);

var

i:integer;

begin

ListZayavkaSnab.Clear;

fmZayavkaSnab.Show;

for i:=1 to 12 do

if fmZayavkaSnab.FindComponent('RzEdM'+IntToStr(i))<>nil then

(fmZayavkaSnab.FindComponent('RzEdM'+IntToStr(i)) as TRzEdit).Text:='0';

fmZayavkaSnab.RzPnMonthes.Enabled:=false;

end;

procedure TfmMainSklad.RzGroupCreateItems1Click(Sender: TObject);

begin

OrderAction:=oaNew;

fmOrderIn.Show;

end;

procedure TfmMainSklad.RzGroup3Items4Click(Sender: TObject);

begin

fmPostavshiki.Show;

end;

procedure TfmMainSklad.RzGroupCreateItems0Click(Sender: TObject);

begin

fmKnigaIn.Show;

end;

procedure TfmMainSklad.N1Click(Sender: TObject);

var

IDSvodnZayavka:integer;

begin

if Application.MessageBox('Выдействительнохотитеудалитьвыбраннуюзапись?', PChar(StrSB),MB_YESNO+MB_ICONQUESTION)=IDYES then

begin

IDSvodnZayavka:=dmStore.IBQZayavkiF2.FieldByName('IDZAYAVKAF2').AsInteger;

if not dmStore.IBQZayavkiF2.Transaction.InTransaction then

dmStore.IBQZayavkiF2.Transaction.StartTransaction;

dmStore.IBQZayavkiF2.SQL.Clear;

dmStore.IBQZayavkiF2.SQL.Add('DELETE FROM ZAYAVKAF2 '+

'WHERE (ZAYAVKAF2.IDZAYAVKAF2 = '''+IntToStr(IDSvodnZayavka)+''')');

dmStore.IBQZayavkiF2.ExecSQL;

dmStore.IBQZayavkiF2.Active:=false;

dmStore.IBQZayavkiF2.Transaction.Commit;

RzGroupZayavkiItems1Click(Self);

end;

end;

procedure TfmMainSklad.RzGroupCreateItems6Click(Sender: TObject);

begin

with dmStore do

begin

IBQTemp.SQL.Clear;

IBQTemp.SQL.Add('SELECT TOVAR.IDTOVAR, TOVAR.NAMETOVAR, TOVAR.COUNTTOV, EDIZM.IDEDIZM, EDIZM.NAMEEDIZM, TOVAR.SCHET');

IBQTemp.SQL.Add('FROM TOVAR');

IBQTemp.SQL.Add('INNER JOIN EDIZM ON (TOVAR.IDEDIZM = EDIZM.IDEDIZM)');

IBQTemp.SQL.Add('ORDER BY TOVAR.SCHET');

IBQTemp.Open;

fmReportInvent.QuickRep1.PreviewModal;

end;

end;

procedure TfmMainSklad.RzMBPrintClick(Sender: TObject);

begin

fmReportZayavkaF2.QuickRep1.PreviewModal;

end;

procedure TfmMainSklad.N2Click(Sender: TObject);

begin

if Application.MessageBox('Выдействительнохотитеудалитьвсезаписи?', PChar(StrSB),MB_YESNO+MB_ICONQUESTION)=IDYES then

with dmStore do

begin

if not IBQZayavkiF2.Transaction.InTransaction then

IBQZayavkiF2.Transaction.StartTransaction;

IBQZayavkiF2.SQL.Clear;

IBQZayavkiF2.SQL.Add('DELETE FROM ZAYAVKAF2');

IBQZayavkiF2.ExecSQL;

IBQZayavkiF2.Active:=false;

IBQZayavkiF2.Transaction.Commit;

RzGroupZayavkiItems1Click(Self);

end;

end;

procedure TfmMainSklad.RzBBFindTovarClick(Sender: TObject);

var

i:integer;

ID:integer;

begin

ID:=-1;

for i:=0 to ListDetailTovar.Count-1 do

if PDetailTovarInfo(ListDetailTovar.Items[i]).ClientsAdd=1 then

begin

ID:=i;

Break;

end;

if ID>-1 then

for i:=0 to RzTreeViewTovars.Items.Count-1 do

begin

if Pos(AnsiUpperCase(Trim(PDetailTovarInfo(ListDetailTovar.Items[ID]).NameTovar)),AnsiUpperCase(RzTreeViewTovars.Items.Item[i].Text))>0 then

begin

RzTreeViewTovars.Select(RzTreeViewTovars.Items.Item[i], [ssLeft]);

RzTreeViewTovarsClick(Sender);

Exit;

end;

end;

end;

. Пребразовать двумерную матрицу размерности n∙n в одномерный массив путем обхода всех элементов двумерной матрицы по скручивающейся против часовой стрелке спирали. Прога будет состоять из 2ух массивов первый это квадратная матрица 3х3 2х2 и т.д. второй просто массив по порядку числа которые мы нашли в матрице (по условию) Ещё раз повторю написать в Delphi 6-7.

Здравствуйте, создал сетевой чат по статье pblog.ru/?p=91 с помощью клиент и сервер сокетов. Все работает, но связь устанавливается только при личном соединении компьютеров(wi-fi(компьютер-компьютер) или через кабель). Подскажите в каком направлении мне нужно двигатся, чтобы создать чат, который можно было бы использовать в обычной сети. Статьи/исходники чатов приветствуются.

Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store
excel   python   wi-fi   windows   windows 7   word   браузер   видеокарта   вики   вирус   драйвера   звук   игры   интернет   клавиатура   комп   компьютер   компьютеры   монитор   ноутбук   ошибка   пк   помогите   помощь   принтер   проблема   программа   программирование   сайт   срочно  

Задай вопрос экспертам по Delphi