007wan |
Отправлено: 20 Апреля, 2019 - 11:11:32
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Спасибо огромное. Но ключ - это дата, а значение - текст, а тут немного наоборот. ключ - время, а значение - текст. А как в этом примере сделать, что бы выводил именно ключ, т.е дату с квадратными скобками и весь текст этой даты. принцип дейсвия пусть остается таким же если возможно.
Тоесть для date = "19.04.2019";
Выведит в messagebox:
Цитата: [19.04.2019]-первый messagebox
16:59:37 = Бот запущен.-второй messagebox
16:59:38 = Бот остановлен пользователем.-третий...
16:59:51 = Запуск невозможен. Причина: Браузер не найден.
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
Именно в строгом порядке, даже дату с квадратными скобками. не важно время, потому что время это тоже текст, оно единое целое с текстом для определенного времени
(Добавление)
Плиз(Отредактировано автором: 20 Апреля, 2019 - 11:13:54) |
|
|
Zireael |
Отправлено: 20 Апреля, 2019 - 19:04:25
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
В википедии структуру ini смотрите.
Цитата: [Section1]
var1=значение_1
var2=значение_2
[Section2]
var1=значение_1
var2=значение_2
С помощью GetPrivateProfileString можно получить:
1. Имена всех секций, т. е. Section1 и Section2.
2. Ключи секции, т. е. для Section1 = var1 и var2, для Section2 = var1 и var2.
3. Значение ключа секции, т. е. Section1 var1 = значение_1, Section1 var2 = значение_2
Цитата: объяснить принцип работы
Получили все ключи для секции [19.04.2019], т. е. 16:59:37, 16:59:38, 16:59:51 и 16:59:52. Потом получили значение каждого ключа. Потом вывели в сообщение ключ и его значение. |
|
|
007wan |
Отправлено: 21 Апреля, 2019 - 10:58:41
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Для примера:
Создать файл "C:\123.ini" с таким содержимым:
Цитата: [18.04.2019]
16:59:38 = Бот остановлен пользователем.
[19.04.2019]
16:59:37 = Бот запущен.
16:59:38 = Бот остановлен пользователем.
16:59:51 = Запуск невозможен. Причина: Браузер не найден.
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
[20.04.2019]
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
[21.04.2019]
16:59:37 = Бот запущен.
Запустить код, чтобы получить все ключи даты 19.04.2019 и их значение.
CODE:external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
int length;
char key_ini[99999], value[999];
string path="C:\123.ini"; // путь к ini
string date="19.04.2019";
int x=GetPrivateProfileString (date, 0, 0, address (#key_ini[0]), sizearray(key_ini), path); // получить все ключи
if(x)
{
length=0;
for(int i=0; i+length<=x; i++)
{
if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path)) // получить значение ключа
{
messagebox(format(#key_ini[length])+" "+format(#value[0]));
}
length=length+size(#key_ini[i])+i+1;
}
}
А как теперь сделать, что бы в файл записывались ключи и значение, а то я только сейчас заметил, что у меня-то был формат
[section]
[text]
А вверху пример такого формата:
[section]
[key] = [text]
Но этот формат меня тоже устраивает, но не могу понять как записать в файл
вот таким форматом, если у меня listbox получает весь текст из каждой строчки
(Добавление)
Если можно, то пожалйуста на примере как будет загружать в список и как будет добавлять именно с этим примером и с ключами плиз
код (Отобразить)CODE:#define LBS_NOSEL 16384
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define WS_CHILD 1073741824
#define LBS_DISABLENOSCROLL 4096
#define WS_VISIBLE 268435456
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
int list = CreateWindow(0, "LISTBOX", "", LBS_NOSEL | WS_BORDER | WS_HSCROLL | WS_VSCROLL | LBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE, 10, 10, 200, 200, gethwnd(0), 0, 0, 0);
int b1=CreateWindow(0, "BUTTON", "Добавить", WS_CHILD | WS_VISIBLE, 10, 220, 120, 30, formatwi(w), 0, 0, 0);
loop()sleep(1);
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)messagebox ("Добавить");
} |
|
|
Zireael |
Отправлено: 21 Апреля, 2019 - 11:32:22
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Создать файл "C:\123.ini" с таким содержимым:
Цитата: [18.04.2019]
16:59:38 = Бот остановлен пользователем.
[19.04.2019]
16:59:37 = Бот запущен.
16:59:38 = Бот остановлен пользователем.
16:59:51 = Запуск невозможен. Причина: Браузер не найден.
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
[20.04.2019]
16:59:52 = Запуск невозможен. Причина: Браузер не найден.
[21.04.2019]
16:59:37 = Бот запущен.
code (Отобразить)CODE:#define LBS_NOSEL 16384
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define LBS_DISABLENOSCROLL 4096
#define LB_SETHORIZONTALEXTENT 404
#define LB_ADDSTRING 384
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
string path="C:\123.ini"; // путь к ini
string date="19.04.2019"; // дата, которую нужно загрузить в список
int list, b1, hdc, max_length=0;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b1)
{
//messagebox ("Добавить");
ini_read();
}
}
function getmessage(0, WM_CREATE)
{
list = CreateWindow(0, "LISTBOX", "", LBS_NOSEL | WS_BORDER | WS_HSCROLL | WS_VSCROLL | LBS_DISABLENOSCROLL | WS_CHILD | WS_VISIBLE, 10, 10, 200, 200, gethwnd(0), 0, 0, 0);
b1=CreateWindow(0, "BUTTON", "Добавить", WS_CHILD | WS_VISIBLE, 10, 220, 120, 30, gethwnd(0), 0, 0, 0);
hdc=GetDC(list);
}
function add_list(string s)
{
int SIZE[2];
new char c[size(s)+1];
strcpy(#c[0], s);
GetTextExtentPoint32(hdc, address(#c[0]), sizearray(c), address(#SIZE[0])); // узнать длину текста в пикселях
if(max_length<SIZE[0])
{
max_length=SIZE[0]; // запомнить максимальную длину строки
sendmessage(LB_SETHORIZONTALEXTENT, SIZE[0], 0, formatiw(list)); // установить ширину прокрутки
}
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
}
function ini_read()
{
int length;
char key_ini[99999], value[999];
if(fopen(path, "rb"))
{
fclose();
int x=GetPrivateProfileString (date, 0, 0, address (#key_ini[0]), sizearray(key_ini), path); // получить все ключи
if(x)
{
add_list(date);
length=0;
for(int i=0; i+length<=x; i++)
{
if(GetPrivateProfileString (date, format(#key_ini[length]), 0, address (#value[0]), sizearray(value), path)) // получить значение ключа
{
//messagebox(format(#key_ini[length])+" "+format(#value[0]));
add_list(format(#key_ini[length])+" "+format(#value[0]));
}
length=length+size(#key_ini[i])+i+1;
}
}
else messagebox("Секция "+date+" в файле "+path+" не найдена");
}
else messagebox("Файл: "+path+" не найден");
}
Цитата: не могу понять как записать в файл
WritePrivateProfileString, на форуме есть примеры. |
|
|
Zireael |
Отправлено: 21 Апреля, 2019 - 12:51:34
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: будет добавляться в файл именно в ту секцию, которая написана.
CODE:external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
WritePrivateProfileString ("19.04.2019", "сюда", "добавляем строчку", "C:\123.ini"); // записать значение (Отредактировано автором: 21 Апреля, 2019 - 12:57:39) |
|
|
007wan |
Отправлено: 21 Апреля, 2019 - 16:38:03
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
А можно ли с помощью external сделать меню такое, как у Кибор? Панель, на которой можно разместить картинки, кнопки и даже текст(текст остановки скрипта, например) итд?
(Добавление)
Можно, пожалуйста пример, потому что я решил, что лучше пусть кнопки запуска, всяки изображения и текст будут в панели, а не отдельными кнопками |
|
|
|