Последние записи
- Windows 10 сменить администратора
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
19th
Сен
Наброски онлайн чата на php
Собственно 6 файлов
style.css – стили
page_top/page_bottom.php – шапка и дно “сайта”
server.php – сам сервер
config.php – настройки
chat.php – “клиент”, то есть пользователи открывают ее.
фух вроде все закомментировал… остальные файлы не требуют комментариев.
приведу код сервера:
include_once(‘config.php’);
$conn = mysql_connect($mysql_addr, $mysql_user, $mysql_pass);
mysql_select_db($mysql_name);
header(‘Expires: Mon, 26 Jul 1997 05:00:00 GMT’);
header(‘Cache-Control: no-store, no-cache, must-revalidate’);
header(‘Cache-Control: post-check=0, pre-check=0′, FALSE);
header(‘Pragma: no-cache’);
// все выше понятно
// error_reporting(E_ALL ^ E_WARNING);
set_time_limit(0);
ob_implicit_flush();
ignore_user_abort();
// игн
орируем закрытие
echo ‘<style> body,html {font-family: Tahoma; font-size:11px;} </style>
<b>CHAT SERVER</b>’;
// заголовок
g_info(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP))<0,‘Socket create’);
// создаем сокет (g_info описана в config.php)
g_info(socket_bind($sock, $adress, $port)<0,‘Socket bind to ‘.$adress);
// связываем
g_info(socket_listen($sock, 5
// слушаем
//$sock = socket_create_listen($port);
// или так
socket_set_nonblock($sock);
// неблокирующий
$current_conn = 0;
$connections =
function server_shutdown(){
global $sock;
socket_close($sock);
die(‘<br><b>SERVER CLOSED!</b>’);
}
// это закрывать
$listen = true;
echo ‘<br>You may close this page or admin it by special soft.’;
function get_u($uid, &$r){
$result = mysql_query(‘SELECT * FROM `sm_users` WHERE `user_uniq`=’.$uid);
if ($result and mysql_num_rows($result)){
$r = mysql_fetch_array($result);
return true;
}
return false;
}
// приплел даже mysql, выбирает пользователя (его запись) через уникальный id function send_head($sock,$send_styles=false){
send_text($sock,
"HTTP/1.1 200 OK\n".
"Expires: Mon, 26 Jul 1997 05:00:00 GMT\n".
"Content-Type: text/
html; charset=UTF-8\n".
"Cache-Control: no-store, no-cache, must-revalidate\n".
"Cache-Control: post-check=0, pre-check=0\n".
"Connection: Keep-Alive\n".
"Pragma: no-cache\n\n".($send_styles?‘<style> body,html {font-family: Tahoma; font-size:11px;} </style>’:”));
}
// очевидно
function trunc($what, &$w1, &$w2){
if ($ps = strpos($what,‘-’)){
$w1 = substr($what, 0, $ps);
$w2 = substr($what, $ps+1
, strlen($what));
} else {
$w1 = $what;
$w2 = ”;
}
}
// если есть "-" то в первое записать то что слева а во второе то что справа, иначе все записать в первое
span>
function send_clientlist(){
$ucl = ”;
foreach($connections as $id => $conn){
$ucl .= $conn[user][user_name].‘<br>’;
}
foreach($connections as $id => $conn){
send_text($connections[$id][’socket’], ‘<script>ucl("’.$ucl.
}
}
// разослать список пользователей
// ДАЛЕЕ ГЛАВНЫЙ ЦИКЛ
while ($listen) {
if (($new_connection = @socket_accept($sock)) !== false){
// если ктото появился
usleep(500000);
// полсекунды ждем
@socket_recv($new_connection,$recvdat, 2048,0);
// читаем то что прислал и если это гет-запрос то
if (preg_match("/GET \/(.*?) HTTP/", $recvdat, $res)){
trunc($res[1],$page,$info);
// смотрим что спрашивали. если спросили client-111 то
// в page запишет client, в info – 111
if ($page==‘client’){
// если это слушатель
&n
bsp; $uid = (int)$info;
if (get_u($uid, $r)){
// получили пользователя
socket_getpeername($new_connection,$peer);
// взяли ip
$connections[] = array(’socket’=>$new_connection,‘peer’=>$peer,‘user’=>$r);
send_head($new_connection,true);
send_clientlist();
// отправили ему недоделанную голову + клиенты
} else {
// иначе сообщили что польз. с таким уник. ид нету
send_head($new_connection
send_text($new_connection,‘ERR-’.$uid);
socket_close($new_connection);
}
} elseif ($page==‘add’
1;{
// если это запрос типа "добавькасообщение"
trunc($info, $u_t, $message);
// выдираем
$uid = (int)$u_t;
send_head($new_connection);
if (get_u($uid, $r)){
// если автор достоверный то рассылаем
foreach($connections as
$id => $conn){
send_text($connections[$id][’socket’], $r[‘user_name’].‘ > ‘.$message.‘<br>’);
}
send_text($new_connection,‘OK’);
} else {
send_text($new_connection,‘ERR’);
}
socket_close($new_connection);
} elseif ($page==‘closeserver’){
// если запрос типа ануказавалитесервер
if ($info==SECRET_WORD){
server_shutdown();
send_head($new_connection,true);
send_text($new_connection, ‘SERVER CLOSED’);
}
socket_close($new_connection);
} elseif ($page==’serverinfo’){
// если возжелили информации
if ($info==SECRET_WORD){
send_head($new_connection,true);
&nbs
p; $serverinfo = "SERVER INFORMATION:<br><br>".
"Commands:<br>".
" 1. <a href=’closeserver-".SECRET_WORD."’ target=’_blank’>Close server</a><br>".
"Information:<br>".
" 1. ClientsList:<br>";
foreach ($co
nnections as $conn){
$serverinfo.=" IP:".$conn[‘peer’]." USER-NAME:".$conn[‘user’][‘user_name’]."<br>";
 
; }
send_text($new_connection, $serverinfo);
}
socket_close($new_connection);
}
} else {
socket_close($new_connection);
die(‘ERROR’);
}
}
usleep(1);
}
?>
дамп базы данных
`id` INT(5) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(64) NOT NULL,
`user_pass` VARCHAR
0;64) NOT NULL,
`user_uniq` INT(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
19th
Рассылка. Выпуск 76
От ведущего.
Доброй ночи, читатели рассылки. Много вадных моментов произошло за эту неделю. Главное – был наш профессиональный праздник – день программиста, а так же вышел очередной номер журнала ПРОграммист. Сейчас подробнее об этом.
18th
Сен
Позиция в BASS
В каком формате BASS возвращает позицию и длину файла, если передавать флаг BYTE_POS (флаг написал по памяти, тот кто знает поймет)?
Это точно не байты, и не связано с секундами вроде никак.
Как перевести в наше человеческое время?
function qbass_gettime(const Channel: DWORD): DWORD;
var
pPos: Cardinal;
AllTime: Cardinal;
begin
Result := 0;
pPos := BASS_ChannelGetLength(Channel, BASS_POS_BYTE);
if (pPos > 0) then
begin
Alltime := Trunc(BASS_ChannelBytes2Seconds(Channel, pPos));
Result := Alltime;
end;
end;
Получает длину трека, а в наше время переводит эта функа:
function qbass_formattime(const Sec: Integer;
const IsURL: boolean): string;
(*******************************************
* RESULT: " 99:99" | "999:99" * | " Radio" *
*******************************************)
const
time = ' 00:00';
radio = ' Radio';
null = ' ';
var
H, M, S: Integer;
Return: string;
begin
if Sec = -1 then
Return := null
else
if Sec < 0 then
Return := time
else
if IsURL then
Return := radio
else
begin
H := Sec div 3600;
S := Sec mod 3600;
M := S div 60;
M := M + (H * 60);
S := (S mod 60);
if M > 99 then Return := Format('%3d:%2.2d', [M, S])
else Return := Format('%2.2d:%2.2d', [M, S]);
end;
Result := Return;
end;
Использовать:
var s:string; mCc,lng: DWORD; begin mCc := BASS_StreamCreateFile(false, pointer(fail), 0, 0, 0 ); try lng := qbass_gettime(mCc); s:= qbass_formattime(lng,false);
15th
Сен
Как снимать звук не со стерео микшера а с микрофона.
На Delphi кода, к сожалению, нет. Есть на си. При желании разобраться можно.
В примере звук захватывается с микшера. Чтобы захватывать с микрофона, нужно в строке:
Res = waveInOpen((HWAVE *)&In,-1,&Format,(DWORD)WorkerThreadId,0,CALLBACK_THREAD);
заменить -1 на UID микрофона (просто число типа 0,1,2…). А чтобы найти микрофон, нужно вызвать waveInGetNumDevs. Эта функция возвращает количество устройств в системе. А затем, добавляя в Combo на форме, результат функции waveInGetDevCaps для каждого UID от 0 до waveInGetNumDevs, можно сделать выбор микрофона.
15th
У всех пользователей форума есть несколько стадий
1. Только зарегился, всем хочешь помочь, отвечаешь на вопросы, стараешься получить положительные отзывы, заработать очки репутации и набрать примерно 300-400 сообщений, в общем, хочешь выделиться из толпы, к концу стадии начинаешь общаться во флудерских разделах.
2. Начинается примерно после набора 400-450 сообщений, тебя уже знают на форуме, появляются друзья, с некоторыми переписываешься в аське, на количество сообщений уже необращаешь внимаение, количество очков репутации всё ещё важный параметр. Отвечаешь только на интерисующие тебя темы и вопросы, стараешься делать более качественные ответы. Большинство сообщений уже во флудерских разделах. Стараешься активно учавствовать в жизни форума. Некоторых (единицы) назначают модератором в некоторых разделах.
3а. Третья стадия постянного юзера форума. Наступает после 1000 сообщений. Общаешься в основном во флудерских разделах, в тематических разделах, отвечаешь только самые-самые интересные темы и вопросы. На репутацию и сообщения уже наплевать. Некоторые юзеры, и во флудерских разделах уже почти общаются, отписываются только в самых интересных темах.
3б. Третья стадия постоянного юзера-модератора. Наступает после назначения модератором на раздел. Первая стадия “дубль два”, снова отвечаешь на вопросы в назначенном разделе, хочешь заработать ещё очков репутации, и ещё несколько сотен сообщений, хочешь сделать раздел на который назначили лучше (добавляешь ссылки на литературу, создаёшь правила). Да чуть не забыл, активно пользуешься системой наказаний, также часто делаешь отзывы другим пользователям (чтобы отвечали лучше те, которые находятся на первой или второй стадии). В общем стараешься сдела
ть форум лучше.
4. Четвёртая стадия есть только у модератора, повторяет третью стадию обычного юзверя, наступает примерно после набора 2000 сообщений. Общаешься в основном во флудерских разделах, в своём разделе следишь только “за порядком”, отвечаешь очень редко (и то, только если самому интересно или больше некому).
copyright (c) rpy3uH, супермодератор programmersforum.ru.
http://programmersforum.ru/showpost.php?p=335439&postcount=28
15th
Imageshack Upload Api
Листинг о том, как загружать изображения на сайт imageshack.us.
function sendimgs(path:string):string;
var
HTTP: TIdHTTP;
MPS: TIdMultiPartFormDataStream;
s,s2,format:string;
begin
HTTP := TIdHTTP.Create(nil);
MPS := TIdMultiPartFormDataStream.Create;
HTTP.HandleRedirects := True;
s:='';
if fileexists(path) then
begin
try
{mps.AddFormField('Upload', 'Submit Query');
s:= HTTP.Post('http://iload8.imageshack.us/upload_api.php', MPS); }
mps.AddFile('fileupload', path, 'multipart/form-data');
s:= HTTP.Post('http://imageshack.us/index.php', MPS);
if pos('/images/blue/check.png', s)>0 then
begin
result:='Done';
end;
result:='Error while sending';
finally
MPS.Free;
HTTP.Free;
deletefile(path);
end;
end else result:='File not found';
end;
14th
Сен
Как узнать разницу в часах между текущим системным временем и исходными данными?
Код:
uses DateUtils;
...................
var
t: TTime;
dt: TDateTime;
begin
t := StrToTime(Edit1.Text);
dt := DateTimePicker1.Date + t;
ShowMessage(FloatToStr(HoursBetween(Today,dt)));
end;
13th
Сен
Шестой выпуск журнала «ПРОграммист»
От редактора. Здравствуйте, уважаемые читатели журнала «
В этом выпуске…
Материал про юзабилити интерфейсов продолжит Александр Демьяненко в рубрике «Отдел тестирования». И наконец-то стартует рубрика «Переводные материалы». Статья Евгения Амосова подробно расскажет нам про протокол работы наших хвостатых PS/2-помощников.
Что такое ТЗ? Как правильно составить ТЗ? Кто должен составлять ТЗ? Прямо голова идет кругом. Но не расстраивайтесь. На эти и другие вопросы постарается ответить Дарья Устюгова.
Для развития координации, цветового восприятия ребенку до 3-5 лет требуются простые и понятные игрушки. Одним из ярких примеров является раскраска и интерактивный алфавит. Не мне вам рассказывать, родители меня поймут, что увлечь малыша могут веселые и красочные картинки зверей, игрушек. Мало того, возможность почувствовать себя художником – это непередаваемое ощущение для ребенка. А поможет нам в этом ваш верный помощник – компьютер и Владимир Дегтярь в рубрике «2D графика». Оценивать же будет самый строгий и требовательный судья – ребенок, экзаменатор нашего труда.
Хорошо-ли вы умеете готовить? Нет, это не шутка , вспомните про направленность нашего журнала. Вспомнили? Cегодня в рубрике «Лаборатория» шеф-повар, Виталий Белик, приготовит компилятор по своему домашнему рецепту. Bon Appetit, друзья!
В рубрике «Архив» мы решили поднять тему взаимодействия с MySQL в C++. В данной статье делится опытом наш форумчанин psycho-coder.
Вот и настал час 0xFF! Мы знаем, что среди наших читателей есть не только программисты, сисопы, но и биологи, радиоинженера и радиолюбители, дизайнеры, физики и химики, профессионалы и просто обычные люди С этим стоит немножко поспорить. Не совсем обычные. Ведь практически сейчас все, что нас окружает, то чем мы пользуемся ежедневно и ежечасно, так или иначе связано с программированием. Пожалуй, ни одна профессия не пустила так глубоко свои корни во все сферы нашей жизни, как
СОДЕРЖАНИЕ НОМЕРА
ТЕМА НОМЕРА
Наши разработки …………………………….. ……….. с.0х02
НЕВЕРОЯТНО, НО ФАКТ
Любопытные факты …………………………….. ………. с.0х03
ПЕРЕВОДНЫЕ МАТЕРИАЛЫ
Исследование протокола PS/2 для мышки …………………… с.0×06
ОТДЕЛ ТЕСТИРОВАНИЯ
Разработчики – интерфейс – пользователи. Часть 2 …………. с.0х0E
ОБЩИЕ ВОПРОСЫ
О правильном составлении ТЗ. Часть 1 ……………………. с.0х14
2D ГРАФИКА
Программы для самых маленьких ………………………….. с.0х17
ЛАБОРАТОРИЯ
Компилятор домашнего приготовления ……………………… с.0х1D
АРХИВ
Работа с MySQL в С++ …………………………….. …… с.0х2A
ЮМОР
Афоризмы – хохмы – загадки …………………………….. с.0х32
Ссылки для скачивания (формат PDF, 53 c., в журнале исходники к статьям):
http://slil.ru/29668837
http://raxp.radioliga.com/cnt/s.php?p=pro6.pdf
http://programmersclub.ru/pro/
http://procoder.info
13th
idHTTP и кодировка
добрый вечер. в переменную типа стринг качается через идхттп гет запросом страница. страница в ютф8, после всего этого пытаюсь распарсить через pos (нужно найти фразу <liкакойтотекстнарусском<strong>) . соответственно, руские буквы кракозябрами, и пос их не ищет. пытался декодировать utf8toansi и наоборот – ничего не помогает. кракозябры меняются только
function UTF8ToStrSmart(Value: String): String;
function UTF8ToStr(Value: String): String;
var
buffer: Pointer;
BufLen: LongWord;
begin
BufLen := Length(Value) + 4;
GetMem(buffer, BufLen);
FillChar(buffer^, BufLen, 0);
MultiByteToWideChar(CP_UTF8, 0, @Value[1], BufLen - 4, buffer, BufLen);
Result := WideCharToString(buffer);
FreeMem(buffer, BufLen);
end;
var
Digit: String;
i: integer;
HByte: Byte;
Len: Byte;
begin
Result := '';
Len := 0;
if Value = '' then Exit;
for i := 1 to Length(Value) do
begin
if Len > 0 then
begin
Digit := Digit + Value;
Dec(Len);
if Len = 0 then
Result := Result + UTF8ToStr(Digit);
end else
begin
HByte := Ord(Value);
if HByte in [$00..$7f] then //Standart ASCII chars
Result := Result + Value
else begin
//Get length of UTF-8 char
if HByte and $FC = $FC then
Len := 6
else if HByte and $F8 = $F8 then
Len := 5
else if HByte and $F0 = $F0 then
Len := 4
else if HByte and $E0 = $E0 then
Len := 3
else if HByte and $C0 = $C0 then
Len := 2
else begin
Result := Result + Value;
Continue;
end;
Dec(Len);
Digit := Value;
end;
end;
end;
end;
Есть ещё 2 совета.
1. Брось инди и переходи на ICS.
2. Обнови инди до максимально последней версии.
Код:
function HttpGetUrl(url: string; idHttp: TidHttp): string;
var
M: TStringStream;
begin
M := TStringStream.Create('');
// try
try
IdHTTP.Get(url, m);
if IdHTTP.ResponseCode = 502 then
begin
result := 'ошибка|'+url;
freeandnil(m);
exit;
end;
except
on e: exception do
begin
// MessageBox(application.ActiveFormHandle, PAnsiChar('Произошла ошибка при получении текста страницы: '+#13+ url + #13+e.Message), 'Ошибка', IDOK);
result := 'ошибка|'+url;
freeandnil(m);
end;
end;
result := m.DataString;
// finally
freeandnil(m);
// end;
end;
итого полный код будет:
Код:
//получаем тест страницы со ссылками на объявления
slText := UTF8ToStrSmart(HttpGetUrl(URL, idHttp1));
12th
Сен
Перевод PByte в TBytes
var
p: PByte;
p1: TBytes;
i: byte;
begin
GetMem(p, 5);
for i := 0 to 4 do
begin
p^ := i;
Inc(p, 1);
end;
Dec(p, 5);
SetLength(p1, 5);
Move(p^, p1[0], 5);
FreeMem(p);
end;
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)