Элементы для задания формата даты

Здесь представлен список возможных значений, которые участвуют при задании формата даты в плагинах UI:

1. d — число в месяце (в один или два символа: 1, 2, 3,... 10, 11,... 31).
2. dd — число в месяце (всегда в два символа: 01, 02, 03,... 10, 11,... 31).
3. o — число в году (в один два или три символа: 1, 2, 3,... 365).
4. oo — число в году (всегда в три символа: 001, 002, 003,... 010, 011,... 365).
5. D — сокращенное названия дня недели.
6. DD — полное названия дня недели.
7. m — номер месяца в году (в один или два символа: 1, 2, 3,... 11, 12).
8. mm — номер месяца в году (всегда в два символа: 01, 02, 03,... 11, 12).
9. M — сокращенное названия месяца.
10. MM — полное названия месяца.
11. y — номер года в две цифры.
12. yy — номер года в четыре цифры.
13. @ — Unix timestamp (количество миллисекунд начиная с 01/01/1970)
14. ! — Windows ticks (количество наносекунд*100, начиная с 01/01/0001).
15. " — одинарная кавычка.
16. все остальное будет отображаться без изменений.

Например, формат даты, вида "31-12-2010" задается строкой "dd-mm-yy".

Стандарты указания дат, доступные в плагине Datepicker:

1. ATOM - 'yy-mm-dd' (соответствует стандартам RFC 3339/ISO 8601)
2. COOKIE - 'D, dd M yy'
3. ISO_8601 - 'yy-mm-dd'
4. RFC_822 - 'D, d M y'
5. RFC_850 - 'DD, dd-M-y'
6. RFC_1036 - 'D, d M y'
7. RFC_1123 - 'D, d M yy'
8. RFC_2822 - 'D, d M yy'
9. RSS - 'D, d M y'
10. TICKS - '!'
11. TIMESTAMP - '@'
12. W3C - 'yy-mm-dd'

Добавлено: 10 Марта 2021 12:26:11 Добавил: Андрей Ковальчук

Как изменить символы валюты в цене на буквы в магазине Woocommerce WordPress

Меняется все с помощью функций, а если точнее с помощью фильтров для woocommerce. Как и все функции, данные добавляются в файл функций. Как я говорил в прошлых статьях, можно добавлять в файл пользовательских функций function.php. Если вы послушались моего совета и создали отдельный файл для Woocommerce, то добавлять нужно в него, чтобы не путать функции темы и Woocommerce, если вы планируете их добавлять много.

Перед изменением function.php или того файла что у вас для функций Woocommerce, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.


Давайте рассмотрим как изменить знак гривны ₴ на грн. Для этого нужно добавить такой код:
add_filter('woocommerce_currency_symbol','change_uah_currency_symbol',10,2);
function change_uah_currency_symbol( $currency_symbol, $currency ) {
switch( $currency ) {case'UAH':$currency_symbol=' грн.'; break;}
return $currency_symbol;
}

Если разобрать код по строкам, то тут все просто:

1. Сначала мы добавляем фильтр - woocommerce_currency_symbol, который вызывает функцию change_uah_currency_symbol.
2. Теперь уже начинается сама функция change_uah_currency_symbol
3. Далее ищем валюту, которая в Woocommerce обозначена как - UAH и меняем ее на грн..
4. Возвращаем нашеновое значение для вывода.
5. И в последней строке, просто закрываем функцию.

Такой же самый смысл, если вы решите поменять другую валюту, например - рубль:
add_filter('woocommerce_currency_symbol','change_rub_currency_symbol',10,2);
function change_rub_currency_symbol( $currency_symbol, $currency ) {
switch( $currency ) {case'RUB':$currency_symbol=' руб.'; break;}
return $currency_symbol;
}

Если вам нужно заменить сразу несколько знаков валют одновременно, то функция аналогичная, за исключением некоторых строк:
add_filter('woocommerce_currency_symbol', 'change_uahrub_currency_symbol', 10, 2);
function change_uahrub_currency_symbol( $currency_symbol, $currency ) {
switch( $currency ){
case 'UAH': $currency_symbol = ' грн.'; break;
case 'RUB': $currency_symbol = ' руб.'; break;
}
return $currency_symbol;
}

Как видите, мы сразу ищем две валюты и в 4 и 5 строке производим замену. Так можно делать с любой валютой. По сути можно брать одну и присваивать ей вообще другие знаки. Например, если у Woocommerce нет нужной вам валюты.

Самые, часто используемые валюты:

1. США Dollar USD
2. Европейский Союз Euro EUR
3. Великобритания Pound Sterling GBP
4. Япония Yen JPY
5. Китай Yuán CNY

Хотелось бы еще дополнить, что после добавления функций желательно перейти в консоль управления сайтом в раздел настроек Woocommerce и установить значение Справа, для установки расположения валюты возле цены товара.

Вот и все, что я хотел показать вам в этой статье. Сложного здесь абсолютно ничего нет.

Добавлено: 10 Марта 2021 11:20:08 Добавил: Андрей Ковальчук

Как сделать адаптивное видео YouTube на сайте

Если вы размещали код YouTube у себя на сайте то заметили что видео выводится с помощью тега iframe. Обычно код видео имеет примерно такой вид:

<iframe width="560" height="315" src="https://www.youtube.com/embed/TdRllKvKi9k" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

Даже по коду видно что по-умолчанию для видео уже заданы размеры плеера. Изначально размеры такие - 560 пикселей ширина и 315 пикселей высота. На большом экране и при нормальной ширине вашего сайта, такой размер вполне допустимый, но если ширина экрана устройства 420 пикселей? Результат - плеер вылазит за границы видимой части и сайт выглядит криво и неправильно. Как же решить данную задачу?

Не раз я встречал простейшее решение. когда убирали с кода iframe значения размеров, а потом просто через стили CSS задавать размеры плеера для определенных разрешений. Вариант допустимый, но трудозатратный и не всегда ровно отображающийся на сайте. Тем неимение, вполне рабочий.

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

Для начала. вам нужно будет разместить код внутри блока. Также блоку присвоим любой класс, например - frame_blc.
<div class="frame_blc">
  <iframe width="560" height="315" src="https://www.youtube.com/embed/Y421bWMelqE" frameborder="0" allowfullscreen></iframe>
</div>

Теперь, нужно добавить универсальные стили, которые и будут адаптировать размер плеера YouTube.
.frame_blc{
  overflow:hidden;
  position:relative;
  padding-bottom:56.25%;
  padding-top:30px;
  height:0;
}
.frame_blc iframe {
  position:absolute;
  width:100%;
  height:100%;
  left:0;
  top:0;
}

По сути мы делаем адаптивным наш родительский блок, а сам плеер делаем с абсолютным позиционированием и растягиваем на всю ширину и высоту относительно родителя. Для блока основным параметром, на который следует обратить внимание, является - padding-bottom:56.25%. Он задает высоту родительского блока для плеера у которого видеоролик имеет соотношения сторон 16:9. Если Ваш видеоролик имеет соотношения 4:3, то параметр будет - padding-bottom:75%.

После проделанной работы, вы можете проверить результат. Теперь видео с YouTube, адаптируется под ширину блока в котором оно находится.

Добавлено: 10 Марта 2021 10:51:52 Добавил: Андрей Ковальчук

Скрипт что определяет мобильное устройство

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

Для формирования правильного отображения сайта и его корректного отображения, используется CSS. Вся адаптация совершается с помощью определенных параметров, о которых знает каждый верстальщик, останавливаться на которых мы не будем. При верстке, часто используются скрипты, для определенных анимацией, эффектов, появления или исчезновения элементов и тд. бывает так, что применение чего-то подобного, очень красиво смотрится в полноценной версии сайта, но на мобильном отвлекает или вообще мешает. Стилями CSS, можно скрыть много элементов, но иногда простое скрытие не помогает, нужно именно отменить действие скрипта.

Именно для этого существует скрипт, который и помогает решить подобные задачи. Носит название он - Current Device. Суть данного скрипта в том, что он добавляет на страницу классы, в зависимости от того, на каком устройстве просматривается сайт. Можете перейти на страницу с примером и посмотреть как это работает.

В примере можете протестировать страницу файрбагом. Выбрать разные устройства. Чтобы добавлялся соответственный класс, нужно перезагружать страницу. Как видно на странице примера список классов, что могут быть добавлены. Соответствующий класс присваивается тегу <html>.

На странице примера указаны следующие параметры и классы к ним, давайте их разберем.

Тип устройства - классы данной категории присваиваются в зависимости от устройства на котором открыт сайт:
.mobile - класс что присваивается, если страница открыта на мобильном устройстве.
.tablet - класс что присваивается, если страница открыта на планшете.
.desktop - класс что присваивается, если страница открыта на персональном компьютере.
Положение устройства - классы этой категории присваиваются в зависимости от положения, ориентации устройства. То есть, экран устройства в горизонтальном или вертикальном положении.
.portrait - класс что присваивается, если устройство имеет вертикальную ориентацию.
.landscape - класс что присваивается, если устройство имеет горизонтальную ориентацию.

Операционная система - классы данной категории присваиваются в зависимости от того какая операционная система установлена на устройстве. Данные классы пригодятся если важно отображать разные элементы для устройств с разной ОС.
.ios, .iphone, .ipad, .ipod, .android, .blackberry, .macos, .windows, .fxos, .meego, .television - классы с названием операционных систем, что и будут присвоены.
В моей практике, данный скрипт выручал меня несколько раз ,в основном благодаря классам .mobile и .desktop. Скорее всего и вам именно они и понадобятся. Как и говорил в начале статьи, данные классы не для CSS, хотя и там можно их использовать. Эти классы скорее для скриптов, когда нужно заставить работать скрипт, только при наличии класса на странице. Примерная функция выглядит так:

$('.mobile .block').click(function(){
//СЮДА КОД ФУНКЦИИ ДЛЯ МОБИЛЬНОГО УСТРОЙСТВА
});

В данном случаи функция сработает если вы нажали на элемент с классом .block на мобильном устройстве. Для ПК такая функция будет аналогична, но с классом .desktop.
$('.desktop .block').click(function(){
//СЮДА КОД ФУНКЦИИ ДЛЯ КОМПЬЮТЕРА
});

Таким образом можете применять работу разных скриптов в зависимости от устройства. Сам скрипт можете скопировать с файла current-device.js и добавить в свои файлы или подключить отдельно. Как это лучше сделать, можете прочитать в статье Как и где подключить скрипт?.

На этом все, спасибо за внимание.

Добавлено: 28 Сентября 2020 19:38:57 Добавил: Андрей Ковальчук

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

Доброго времени суток.

В этой статье хочу рассказать вам, как добавить систему оценки статей через комментарии WordPress без плагина. Суть такого рейтинга в том, что каждый, кто оставляет на сайте комментарий через стандартную форму WordPress, так же ставит оценку по пятизвездочной системе. Рядом с комментарием публикуется и оценка комментатора.

Я предлагаю добавить код функций будущего рейтинга прямо в файл функций function.php. Вы, если хорошо знакомы с WordPress, можете сделать плагин.

Добавить надо следующий код нужно в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.

//ДОБАВЛЯЕМ РЕЙТИНГ К КОММЕНТАРИЯМ
add_action( 'comment_form_logged_in_after', 'comm_rating_rating_field' );
add_action( 'comment_form_after_fields', 'comm_rating_rating_field' );
function comm_rating_rating_field () { ?>
<div class="com_block_star">
<label for="rating">Рейтинг<span class="required">*</span></label>
<fieldset class="comments-rating">
<span class="rating-container">
            <?php for ( $i = 5; $i >= 1; $i-- ) : ?>
                <input type="radio" id="rating-<?php echo esc_attr( $i ); ?>" name="rating" value="<?php echo esc_attr( $i ); ?>" /><label for="rating-<?php echo esc_attr( $i ); ?>"><?php echo esc_html( $i ); ?></label>
            <?php endfor; ?>
<input type="radio" id="rating-0" class="star-cb-clear" name="rating" value="0" /><label for="rating-0">0</label>
</span>
</fieldset>
</div>
<?php
}
//СОХРАНЯЕМ РЕЗУЛЬТАТ
add_action( 'comment_post', 'comm_rating_save_comment_rating' );
function comm_rating_save_comment_rating( $comment_id ) {
    if ( ( isset( $_POST['rating'] ) ) && ( '' !== $_POST['rating'] ) )
    $rating = intval( $_POST['rating'] );
    add_comment_meta( $comment_id, 'rating', $rating );
}
 
//ОБЯЗАТЕЛЬНОСТЬ РЕЙТИНГА
add_filter( 'preprocess_comment', 'comm_rating_require_rating' );
function comm_rating_require_rating( $commentdata ) {
    if ( ! isset( $_POST['rating'] ) || 0 === intval( $_POST['rating'] ) )
    wp_die('Ошибка: Вы не добавили оценку. Нажмите кнопку «Назад» в своем веб-браузере и повторно отправьте свой комментарий с оценкой.');
    return $commentdata;
}
 
//ВЫВОДИМ РЕЙТИНГ В ОПУБЛИКОВАННОМ КОММЕНТАРИИ
add_filter( 'comment_text', 'comm_rating_display_rating');
function comm_rating_display_rating( $comment_text ){
if ( $rating = get_comment_meta( get_comment_ID(), 'rating', true ) ) {
$stars = '<div class="com_star">';
for ( $i = 1; $i <= $rating; $i++ ) {$stars .= '<span class="dashicons dashicons-star-filled"></span>';}
$stars .= '</div>';
$comment_text = $comment_text . $stars;
return $comment_text;
} else {return $comment_text;}
}
 
//ПОДКЛЮЧАЕМ СТИЛИ DASHICONS
add_action( 'wp_enqueue_scripts', 'comm_rating_styles' );
function comm_rating_styles() {
wp_enqueue_style( 'dashicons');
}

Код разбит комментариями, за что отвечает каждая его часть.

1. Добавляем рейтинг к комментариям - эта часть кода, добавит в вашу форму комментариев рейтинг. Изначально это просто радио кнопки. Чтобы они превратились в звезды, понадобится еще несколько моментов.
2. Сохраняем результат - данная функция, сохраняет результат голосования от комментатора.
3. Обязательность рейтинга - эта функция делает наш рейтинг обязательным. Если комментатор не выставит оценку, комментарий не будет отправлен. Если это вам не нужно, то не добавляйте эту часть кода, а так же в самой первой части, можете удалить код - <span class="required">*</span> По-умолчанию, в комментариях WordPress, звездочка означает обязательность заполнения. Если у вас не так, можете поменять.
4. Выводим рейтинг в опубликованном комментарии - данная функция выводит рейтинг в опубликованном комментарии. То бишь результат.
5. Подключаем стили dashicons - данная функция подключает вшитые в WordPress стили шрифта dashicons. Благодаря ему наши радио кнопки и превратятся в звезды. Но чтобы шрифт заработал, нужен еще один шаг.

Чтобы рейтинг красиво отобразился, ему нужно добавить CSS стили. Можете добавить их в свой файл стилей или в отдельный, а потом его подключить, в общим, как вам удобно.
.all_com_pr span:before{color:#FB9C30;}
.com_block_star{margin:10px 0;}
.comments-rating{border: none;padding: 0;margin-left: 0;}
.comments-rating label{display:inline-block;font-size:18px;}
.rating-container{font-size: 0;unicode-bidi: bidi-override;direction: rtl;}
.rating-container * {font-size: 1.4rem;}
.rating-container > input {display: none;}
.rating-container > input + label {
    font-family:'dashicons';
    display: inline-block;
    overflow: hidden;
    text-indent: 9999px;
    width: 1em;
    white-space: nowrap;
    cursor: pointer;
    margin: 0;
}
 
.rating-container > input + label:before {
    display: inline-block;
    text-indent: -9999px;
    content: "\f154";
    color: #888;
}
 
.rating-container > input:checked ~ label:before,
.rating-container > input + label:hover ~ label:before,
.rating-container > input + label:hover:before {
    content: "\f155";
    color: #FB9C30;
    text-shadow: 0 0 1px #888;
}
 
.rating-container > .star-cb-clear + label {
    text-indent: -9999px;
    width: .5em;
    margin-left: -.5em;
}
 
.rating-container > .star-cb-clear + label:before {
    width: .5em;
}
 
.rating-container:hover > input + label:before {
    content: "\f154";
    color: #888;
    text-shadow: none;
}
 
.rating-container:hover > input + label:hover ~ label:before,
.rating-container:hover > input + label:hover:before {
    content: "\f155";
    color: #FB9C30;
    text-shadow: 0 0 1px #888;
}

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

Стили можете править под себя и менять внешний вид звезд как вам угодно.

Теперь хочу показать как сделать общую оценку взятую из всех комментариев и выведенную перед контентом, то бишь перед текстом статьи. Для этого вам нужно добавить псоле уже добавленных выше функций, еще парочку:
//ПОДСЧЕТ ОБЩЕЙ ОЦЕНКИ.
function comm_rating_get_average_ratings( $id ) {
    $comments = get_approved_comments( $id );
    if ( $comments ) {
        $i = 0;
        $total = 0;
        foreach( $comments as $comment ){
            $rate = get_comment_meta( $comment->comment_ID, 'rating', true );
            if( isset( $rate ) && '' !== $rate ) {
                $i++;
                $total += $rate;
            }
        }
 
        if ( 0 === $i ) {
            return false;
        } else {
            return round( $total / $i, 1 );
        }
    } else {
        return false;
    }
}
 
// ВЫВОД ОЦЕНКИ ПЕРЕД ПОСТОМ
add_filter( 'the_content', 'comm_rating_display_average_rating' );
function comm_rating_display_average_rating( $content ) {
    global $post;
    if ( false === comm_rating_get_average_ratings( $post->ID ) ) {
        return $content;
    }
    $stars   = '';
    $average = comm_rating_get_average_ratings( $post->ID );
 
    for ( $i = 1; $i <= $average + 1; $i++ ) { $width = intval( $i - $average > 0 ? 20 - ( ( $i - $average ) * 20 ) : 20 );
 
        if ( 0 === $width ) {
            continue;
        }
 
        $stars .= '<span style="overflow:hidden; width:' . $width . 'px" class="dashicons dashicons-star-filled"></span>';
 
        if ( $i - $average > 0 ) {
            $stars .= '<span style="overflow:hidden; position:relative; left:-' . $width .'px;" class="dashicons dashicons-star-empty"></span>';
        }
    }
     
    $custom_content  = '<div class="all_com_pr">Оценка: ' . $average .' ' . $stars .'</div>';
    $custom_content .= $content;
    return $custom_content;
}

1. Подсчет общей оценки - эта функция вычисляет среднюю оценку.
2. Вывод оценки перед постом - то что получилось выводит перед контентом.

Если вас это не устраивает, вы хотите выводить где-то в своем месте, то можете вместо последней функции, добавить немного измененную, которую нужно вызывать в нужном месте.
function comm_rating_display_average_rating() {
global $post;
$stars   = '';
$average = comm_rating_get_average_ratings( $post->ID );
for ( $i = 1; $i <= $average + 1; $i++ ) { $width = intval( $i - $average > 0 ? 20 - ( ( $i - $average ) * 20 ) : 20 );
if ( 0 === $width ) {continue;}
$stars .= '<span style="overflow:hidden; width:' . $width . 'px" class="dashicons dashicons-star-filled"></span>';
if ( $i - $average > 0 ) {
$stars .= '<span style="overflow:hidden; position:relative; left:-' . $width .'px;" class="dashicons dashicons-star-empty"></span>';
}
}
$custom_content  = '<div class="all_com_pr">Оценка: ' . $average .' ' . $stars .'</div>';
echo $custom_content;
}

Что-бы вызвать данную функцию, то есть запустить ее, в нужном вам месте, внутри цикла добавьте такую строку:
comm_rating_display_average_rating();

Данная строка помещается в среду PHP, если у вас HTML, то нужно заключить строку в теги PHP, выглядеть она будет так:
<?php comm_rating_display_average_rating(); ?>

В том месте где вы разместите эту строку, там и появится рейтинг.

Данная система рейтинга по своему интересна и имеет право на существование. С ее помощью можно добиться более точной оценки материала, а в месте с ней и комментарий человека, что ему понравилось или нет в вашем материале.

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


На этом все, спасибо за внимание.

Добавлено: 27 Сентября 2020 05:39:12 Добавил: Андрей Ковальчук

PHP-Trace

PHP

Installation:
Drop it into a directory, and call it. You will need execute-rights for this file.

What for?:
I dunno...just cool !.

Can I change it?:
Sure, just sent me back the changed script and let's share your bright ideas (I doubt that there is
much to add on, it's a simple script...).

It doesn't work, the error messages talks about a "fork?!?".
Great. There are two possible causes. First, you use the "win" version on Unix or the other way around.
Edit the script an check/change the $os variable.

Second, your webserver doesn't allow the execution of system command out of the script. Well, if you own
the server, you can change this in the php.ini or in the webserver settings. If you don't own the server,
it's bad. The script needs to call "system" to do the traceroute. Not much I can do...or you, other
than changing provider....

Support ??!
Hello, this isn't a compicated script. More likley you will have a problem with your PHP installation or
webserver, but not with the script itself...but if you really want to, write me or post your questions
at my little forum (http://www.theworldsend.net)

<?php
//  This script was writen by webmaster@theworldsend.net, Aug. 2001
//  check out my webpage with the newest stuff...around php and networking
//  http://www.theworldsend.net 
//  This is my second script. Enjoy.
//
//
$os = "win";   //os is "win" or "unix" (unix includes linux and friends)
//
// 
// Trace on unix already displays the hostnames, so we don't blend in the "resolve" option.
// If os = win, we put in a checkbox to ask for "resolve or not".
//
//  Put it into whatever directory and call it. That's all.
//
//
// nothing more to be done. 
//
If ($submit =="Trace!") 
{
  If (ereg(" ",$host)) 
  {
      echo 'No Space in Host field allowed !';
      echo '<a href="php-trace.php">Back</a>';
      $again= True;
  }
  else 
  {
       If ($host <> "")
       {
          echo("Traceroute Output:<br>"); 
          echo '<pre>';
          $host = escapeshellarg($host); 
          if ($os ="win") 
          {
               If ($resolve == "true") 
               {
                   system("tracert $host");
               }
               else
               {
                   system("tracert -d  $host");
               }; 
          }
          else
          {
               system("traceroute $host");
          };
          echo '</pre>';
       }
       else
       {
          echo 'You have not fill out the host field. Use your BACK button';
          echo 'to return to the form and enter an IP or Host';
       };
  };
}
else 
{
  echo '<html><body>';
  echo '<form methode="post" action="php-trace.php">';
  echo 'Enter IP or Host <input type="text" name="host"></input>';
  if ($os == "win") 
  {
     echo 'Resolve IPs ? <input type="checkbox" name="resolve" value="true" unchecked></input>';

  };
  echo '<input type="submit" name="submit" value="Trace!"></input>';
  echo '</form>';
  echo '</body></html>';
};
?>

Добавлено: 22 Августа 2020 03:52:03 Добавил: Андрей Ковальчук

Chat

PHP

<!doctype html public "-//w3c//dtd html 3.2//en">
<!-- 
/* 	This chat has been created by Nicola Delbono <key5@key5.com>			*/
/*	you can modify and/or use the code for free. Pleeease keep these three lines	*/
/*	into your customized chat										*/
  -->
<html>

<head>
<title>chat</title>
<meta name="GENERATOR" content="Arachnophilia 4.0">
<meta name="FORMATTER" content="Arachnophilia 4.0">
<!-- Arachnophilia is free but !careware! -->
<!-- http://www.arachnoid.com/arachnophilia/index.html -->
</head>

<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000">
<?
$person = str_replace ("\n"," ", $person);
$person = str_replace ("<", " ", $person);
$person = str_replace (">", " ", $person);
$person = stripslashes ($person);
?>
<form action="chat.php3" method="post">
Nickname: <input type="text" name="person" size="40" maxlength="80" value="<? echo $person; ?>"><br>
Your message: <textarea name="message" rows="3" cols="40"></textarea>
<input type="submit" value="Send/refresh">
</form>

<?
/*	the $chat_file_ok is a txt file (or whatever else) I use for				*/
/*	messages storage										*/

$chat_file_ok = "c:\\apache\\htdocs\\cart\\chat\\msg.txt";

/*	$chat_lenght is the number of messages displayed				*/

$chat_lenght = 10;

/*	$max_file_size is the maximum file size the msg.txt file can reach		*/
/*	assuming that any chatter doesn't write a message longer than		*/
/*	$max_single_msg_lenght (this case: 100,000 bytes = 100Kb)		*/

$max_single_msg_lenght = 100000;
$max_file_size = $chat_lenght * $max_single_msg_lenght;

/* check if file size is over maximum	(set with $max_file_size )			*/

$file_size= filesize($chat_file);

/*	if file size is more than allowed then							*/
/*			reads last $chat_lenght messages (last lines of msg.txt file)	*/
/*			and stores them in $lines array						*/
/*			then deletes the "old" msg.txt  file and create a new msg.txt	*/
/*			pushing the "old" messages stored in $lines array into the	*/
/*			"new" msg.txt file using $msg_old.   					*/
/*		Note: this is done in order to avoid huge msg.txt file size.		*/
			
if ($file_size > $max_file_size) {

/* reads file and stores each line $lines' array elements	*/

$lines = file($chat_file_ok);
/*get number of lines								*/

$a = count($lines);

$u = $a - $chat_lenght;
for($i = $a; $i >= $u ;$i--){
		$msg_old =  $lines[$i] . $msg_old;
	}
$deleted = unlink($chat_file_ok);
$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, $msg_old);
fclose($fp);
}

/* the following is because every message has to be		*/
/* placed into one single line in the msg.txt file.			*/
/* You can render \n (new lines) with "<br>" html tag anyway.	*/

$msg = str_replace ("\n"," ", $message);

/*	if the user writes something...					*/
/*		the new message is appended to the msg.txt file	*/
/*	REMEMBER: the message is appended, hence, if 	*/
/*		you want the last message to be displayed as the	*/
/*		 first one, you have to 					*/

/*		1. store the lines (messages) into the array		*/
/*		2. read the array in reverse order				*/
/*		3. post the messages in the output file (the chat)	*/
		
/* I added these three lines in order to avoid buggy html code and slashes	*/
$msg = str_replace ("\n"," ", $message);
$msg = str_replace ("<", " ", $msg);
$msg = str_replace (">", " ", $msg);
$msg = stripslashes ($msg);




if ($msg != ""){

$fp = fopen($chat_file_ok, "a+");
$fw = fwrite($fp, "\n<b>$person :</b> $msg<br>");
fclose($fp);
}

$lines = file($chat_file_ok);
$a = count($lines);

$u = $a - $chat_lenght;

/*	reads the array in reverse order and outputs to chat	*/
for($i = $a; $i >= $u ;$i--){
		echo $lines[$i] . "<hr>";
	}


?>


</body>

</html>

Добавлено: 22 Августа 2020 03:47:52 Добавил: Андрей Ковальчук

webwho

#!/usr/local/bin/perl

$| = 1;

print "Content-type: text/html\n\n";


##############################################
# WebWho+ programmed for Cyberstrider Ltd 
# By Tony Greenwood (TonyG  tony@worden.co.uk)
# 11th January 2002	
# Please mention www.webwho.co.uk somewhere
##############################################

# IMPORTANT
# A coder can spot his code no matter how much it is hacked 
# I spot my code all over the place and thats great. But not when 
# you put your name next to it when all you did was change
# the way it looks...If you want to be a coder then start by playing fair OK :)
#
### SETUP ###
# Presuming the first line showing the path to Perl is correct then
# WebWho will run  straight from the box. However you may
# want to change the look and feel as well as the domain
# searches and other neat stuff
#
#
#
###### MAIN SUBMIT BUTTON GRAPHIC OR STANDARD BUTTON
my $submit_form="<INPUT STYLE='background-color:#FFB709' TYPE='submit' NAME='Check' value='Check it!'>";
#my $submit_form="<INPUT TYPE='image' src='/gfx/submit.gif' border=0 align='absmiddle'>";
#
##### TABLES
# table sizes
my $tw='420';		# Actual Table width
my $t1='250';		# Domain name cell
my $t2='80';		# Result cell
my $t3='90';		# Extra info cell
my $border=1;		# Table border, This is my sexy border and not the crappy table border
# table colors

my $webwhobar="#21299C"; 	# WebWho bar
my $input_area="#63adde";		# Type in the domain
my $list_names="#FFB709";		# Domain, result, Info
my $extras="#FFB709";		# Available or Check action
my $available="#63adde";		# row of info if available
my $unavailable="#1f5ca1";		# Row of info if not available
my $errorbox="red";		# server down or not responding row
my $details="#63adde";		# Info returned on a single whois
#
#### PAGE
# text colors
my $font=" size=2 face=\"Verdana, Arial,Helvetica, sans-serif\""; 	# Whenever you use $font :)
my $links="white";						# Body default ,Also hlink, vlink
my $text="black";						# Body default
my $webwhobart="white"; 		# WebWho bar
my $input_areat="black";		# Type in the domain
my $list_namest="black";		# Domain, result, Info
my $errorboxt="white";		# server down or not responding row
my $detailst="black";		# Info returned on a single whois
# page
my $background="white";					# page background
#
# messages
my $alltext="All";						# In drop down list to check for all
my $whatnext="<font color='black' $font>Available</font>";		# TLD is Available
my $taken="<font color='white' $font>Taken</font>";		# TLD is Taken
my $details1="<font color='black' $font><b>Details</b></font>";	# See detailed lookup
my $details2="<font color='black' $font><b>Check</b></font>";	# Same as to check if result is true
#
#
##### TLDS ######
# There are 3 elements to each TLD seperated by a comma.
# (1) The TLD to search for
# (2) The Database to search in
# (3) The text to search for if No match ie Is available
# You can add or take away tlds but make sure numbers in the
# angle brackes run from 0 to whatever
my @tld;
$tld[0]="co.uk,whois.nic.uk,No match";
$tld[1]="org.uk,whois.nic.uk,No match";
$tld[2]="me.uk,whois.nic.uk,No match";
$tld[3]="net.uk,whois.nic.uk,No match";
$tld[4]="ltd.uk,whois.nic.uk,No match";
$tld[5]="plc.uk,whois.nic.uk,No match";
$tld[6]="com,whois.crsnic.net,No match";
$tld[7]="net,whois.crsnic.net,No match";
$tld[8]="org,whois.publicinterestregistry.net,NOT FOUND";
$tld[9]="edu,whois.crsnic.net,No match";
$tld[10]="eu.com,whois.centralnic.com,No match";
$tld[11]="gb.com,whois.centralnic.com,No match";
$tld[12]="gb.net,whois.centralnic.com,No match";
$tld[13]="uk.com,whois.centralnic.com,No match";
$tld[14]="uk.net,whois.centralnic.com,No match";
$tld[15]="us.com,whois.centralnic.com,No match";
$tld[16]="info,whois.afilias.net,NOT FOUND";
$tld[17]="biz,whois.neulevel.biz,Not found:";
my $me = "webwho.cgi";	# Change this if you change the name of the script 
my $timeout=12;		# Seconds to check WHOIS. More seconds gives more chance

## STOP SETUP ##

#use diagnostics;
#use strict;
#use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
use IO::Socket;

# Variables used throughout the script
my ($i,$output,$what,$lupe,$timeblunder);
my @splitz;
my @result;
my @isit;
my @extras;
my $all=1;
my $more=0;

my $query=new CGI;
my %stuff = map {$_, $query->param($_)} $query->param();
if (defined $stuff{'command'})
	{
	$stuff{'command'}=&cleanup($stuff{'command'});
	}
else
	{$stuff{'command'}="";}
if (!defined $stuff{'type'} or $stuff{'type'} eq ""){$stuff{'type'}=$alltext;}
$stuff{'type'} =~ tr/A-Z/a-z/;
foreach $i (@tld)
	{
	@splitz=split(/,/,$i);
	if($stuff{'type'} eq $splitz[0]){$all=0;}
	}
if ($all){$stuff{'type'}=$alltext;}

######################
# START THE HTML


#&fatal_error("$stuff{'command'}*<br>$stuff{'type'}+");



if ($stuff{'command'} eq "")
	{
	&my_header;
	&my_footer;
	exit;
	}
if (length($stuff{'command'})<3)
	{&fatal_error("Sorry wrong amount of characters");} 
if (! $all)
	{
	&my_header;
	$more=1;
	$output=&domainchk($stuff{'command'},$stuff{'type'});
	&showone;
	&my_footer;
	exit;
	}
if ($all)
	{
	&all;
	exit;
	}
&fatal_error("Wierd? Ya really shouldn't have made it to here :(");
exit;

sub cleanup()
	{
	$_[0]=substr($_[0],0,70); 
	$_[0] =~ tr/A-Z/a-z/;		
	$_[0] =~ s/http\:\/\///gi;	
	$_[0] =~ s/www\.//gi;		
	$_[0] =~ s/[^a-z0-9\-]//g;	
	$_[0] =~ s/^\-+//;		
	$_[0] =~ s/\-+$//g;		
	$_[0] =~ s/\s//g;		
	return $_[0];
	}

sub domainchk()
	{

	foreach $i (@tld)
		{
		my $this=$_[0];
		my $that=$_[1];
		my @splitx=split(/,/,$i);
		if ($splitx[0] eq $that)
			{
			eval 
				{
        				local $SIG{ALRM} = sub { die "alarm\n" };    
        				alarm ($timeout);
				$what  = IO::Socket::INET->new("$splitx[1]:43") or return ("$splitx[1] Server not responding");
				print $what "$this.$that\n";
				@result=<$what>;
				close $what;
				chop(@result);
				alarm (0);
				};
			if ($@ eq "alarm\n") 
				{	        
				return ("$splitx[1] Server Timed Out")
   				}
    				elsif ($@)
    				{
				return ("$splitx[1] Server Unexplained Error")
    				}


			
			# We know we got a valid return and no problems at this point
			my $whatis="$this.$that is Unavailable";
			foreach $i (@result) 
	 			{
                			if ($i =~ /Whois Server: whois./ and $more)
					{
					my $ckl=$i;
					$ckl=~s/Whois Server: //;
					$ckl =~ s/\s+//;
					my $added="";
					eval 
						{
        						local $SIG{ALRM} = sub { die "timed\n" };    
        						alarm ($timeout);
						$what  = IO::Socket::INET->new("$ckl:43") or $added="<b>($ckl) Server is not responding</b>";
						print $what "$this.$that\n";
						@extras=<$what>;
						close $what;
						chop(@extras);
						alarm (0);
						};
					if ($@ eq "timed\n") 
						{	        
						$added="$ckl Server Timed Out";
   						}
					$extras[0]=$added;
					push(@result,"<hr>"); 
					}
                			if ($i =~ /$splitx[2]/ig){$whatis="$this.$that is Available";}
               				}
			return $whatis;
			}
		}
	
	}
	
sub all
	{
	&my_header;
	&start_table;
	print"<tr align=center bgcolor='$list_names'>
	<th  width='$t1'><font color=$list_namest $font>Domain</font></th>
	<th  width='$t2'><font color=$list_namest $font>Result</font></th>
	<th  width='$t3'><font color=$list_namest $font>Action</font></th></tr></table></td></tr></table>";
	$lupe=0;
	foreach $i (@tld)
		{
		@splitz=split(/,/,$i);
		$output=&domainchk($stuff{'command'},$splitz[0]);
		if($output eq "$stuff{'command'}.$splitz[0] is Unavailable")
			{
			&start_table;
			$isit[$lupe]="<tr align=center bgcolor='$unavailable'><td  width='$t1' ><a href='http://www.$stuff{'command'}.$splitz[0]' target='new'><b>$stuff{'command'}.$splitz[0]</b></a></td><td width='$t2'><b>$taken</b></td><td  width='$t3' bgcolor=$extras><a href='$me?command=$stuff{'command'}&type=$splitz[0]'>$details1</a></td></tr>";
			}
		if($output eq "$stuff{'command'}.$splitz[0] is Available")
			{
			&start_table;
			$isit[$lupe]="<tr align=center bgcolor='$available'><td width='$t1'><b>$stuff{'command'}.$splitz[0]</b></td><td width='$t2'><b>$whatnext</b></td><td width='$t3' bgcolor=$extras><a href='$me?command=$stuff{'command'}&type=$splitz[0]'>$details2</a></td></tr>";
			}
		if($output =~ /Server/g)
			{
			&start_table;
			my $tt=$t1+$t2+$t3;
			$isit[$lupe]="<tr align=center bgcolor='$errorbox'><td width='$tt'><font color=$errorboxt $font><b>$stuff{'command'}.$splitz[0]</b> $output</font></td></tr>";
			}
		print "$isit[$lupe]</table></td></tr></table>";
		$lupe++;
		}

	&my_footer;
	}




sub my_header()
{
print<<"[HTML]";
<HTML><head><title>Domain Check</title></head>
<body 	 vlink="$links"
	 alink="$links" 
       bgcolor="$background"
	  link="$links" 
	  text="$text"
     topmargin="20" 
    leftmargin="0"
  marginheight="20" 
   marginwidth="0">
<CENTER>
<form name="defaulter" action="$me" method="post">
[HTML]
&start_table;
print<<"[HTML]";
<tr align=left>
<td bgcolor="$webwhobar" height=15>
<a href="http://www.webwho.co.uk"><font color=$webwhobart $font><b>www.webwho.co.uk</b></a></font>
</td></tr>


<tr align=center valign=middle><td bgcolor="$input_area">
<font color=$input_areat $font><b>www.</b></font>
<INPUT	STYLE="background-color:#ffffff" 
	TYPE="text" 
	NAME="command" 
	SIZE="25" 
	MAXLENGTH="60" 
	VALUE=$stuff{'command'}>

<select STYLE="background-color:#ffffff" NAME="type" SIZE="1">
[HTML]
print "<option";

if ($stuff{'type'} eq $alltext){print " selected";}
	print ">$alltext</option>";
foreach $i (@tld)   
	{
	@splitz=split(/,/,$i);
	print "<option";
	if ($stuff{'type'} eq $splitz[0]){print " selected";}
	print ">$splitz[0]</option>";
        	}
               
            
                
print<<"[HTML]";               
</select>

$submit_form</td></tr></table></td></tr></table></form>
[HTML]
}

sub start_table
{
print<<"[HTML]"; 
<table width="$tw" border=0 bgcolor="black" cellspacing=0 cellpadding=0><tr valign=middle align=center><td valign=middle align=center><table border="0" cellpadding="0" cellspacing="$border" width="100%">
[HTML]
}

sub showone
{
&start_table;
print "<tr bgcolor='black'><td bgcolor='$list_names'>";
print "<font size=2 $font color=$list_namest><b> $output<br></b></font></td></tr><tr bgcolor='black'><td bgcolor='$details'><font size=2 $font color=$detailst>";


if($stuff{'type'} eq "biz")
	{
	my $dummy=join("<br>",@result);
	($what,$lupe)=split(/OF THE AVAILABILITY OF A DOMAIN NAME./,$dummy);
	print "$lupe<hr>$what OF THE AVAILABILITY OF A DOMAIN NAME.";
	}
	else
	{
	foreach $i (@result)
		{
		print "$i<br>";
		}
	foreach $i (@extras)
		{
		print "$i<br>";
		}
	}
	print "</b></font></td></tr></table></td></tr></table>\n";

}
sub my_footer
{
print<<"[HTML]";  
</body></html>
[HTML]
}


############################
# Whoopsydaisy
sub fatal_error()
{
&my_header;
&start_table;
print<<"[HTML]";
<tr bgcolor='black' align=center>
<th colspan=3 bgcolor=red><font color=white  $font>$_[0]</font></th>
</tr>

</table></td></tr></table></center></BODY></HTML>

[HTML]
&my_footer;
exit;
}

Добавлено: 15 Августа 2020 04:02:37 Добавил: Андрей Ковальчук

Menu Redirector

#!/usr/bin/perl

####################################################################
#                                                                  #
#               Menu Redirector                                    #
#               Kastle Internet Services                           #
#               http://www.kastle.net                              #
#               kastle@kastle.net                                  #
#                                                                  #
####################################################################
#                                                                  #
#  THIS PROGRAM MAY BE USED AND DISTRIBUTED FREELY PROVIDED        #
#  NO MODIFICATIONS ARE MADE TO THE CODE.                          #
#                                                                  #
#  Copyright (c) 1998 - Kastle Internet Services                   #
#  All rights reserved                                             #
#  Written & Tested by Kastle Internet Services                    #
#  gatekeeper@kastle.net                                           #
#                                                                  #
#                                                                  #
####################################################################
#  DISCLAIMER:                                                     #
#                                                                  #
#  In no event will Kastle Internet Services be liable to the user #
#  of this script or any third party for any damages, including    #
#  any lost profits, lost savings or other incidental,             #
#  consequential or special damages arising out of the operation   #
#  of or inability to operate this script, even if user has been   #
#  advised of the possibility of such damages.                     #
#                                                                  #
####################################################################


#########################################
#      DO NOT EDIT BELOW THIS LINE      #
#########################################

&parse_form;

$gotourl = $FORM{'url'};

print "Location: $gotourl\n\n";


sub parse_form {

   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
   @pairs = split(/&/, $buffer);
   foreach $pair (@pairs) {
      ($name, $value) = split(/=/, $pair);

      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

      $FORM{$name} = $value;
   }
}

Добавлено: 11 Июля 2020 07:57:34 Добавил: Андрей Ковальчук

Закрытие элемента при клику за его пределами

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

О том как сделать подобные окна, подробно мы останавливаться не будем. На моем сайте есть много статей на подобные темы.

Теперь подробнее о скрипте. Он работает на основе jQuery,поэтому, мы должны убедится что к сайту уже подключена библиотека jQuery. Если нет, то это нужно сделать.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

После библиотеки нужно подключить наш скрипт.
Выглядит скрипт так:
$(document).mouseup(function (e){
var modalctr = $("#modal_cinw_ctnr");
var modal = $(".modal_cinw");
if (!modal.is(e.target) && modal.has(e.target).length === 0){
modalctr.hide();
}
});

Скрипт имеет важные параметры, настройка которых нужна для корректной работы скрипта.

$(document).mouseup(function (e){ - эта строка определяет, что скрипт будет работать когда отпущена любая из стандартных клавиш мыши.

var modalctr = $("#modal_cinw_ctnr"); - создаем переменную. В данном случаи это родительский контейнер окна. В примере это затемненная область поверх сайта. Иногда такой области нет, все зависит от типа вашего окна или другого элемента который вы хотите скрыть по клику вне его области.
#modal_cinw_ctnr - это айди нашего родительского контейнера. Меняйте на свой нужный.

var modal = $(".modal_cinw"); - создаем вторую переменную. Как раз эта переменная и является нашим окном, нажимая вне его области и будет скрываться именно оно. .modal_cinw - класс нашего окна. Вы можете менять на айди или класс, вашего элемента, что нужно скрыть.

if (!modal.is(e.target) && modal.has(e.target).length === 0){ - в этой строке мы определяем был ли совершен клик по нашему главному элементу, то бишь по окну или нет, а также по его дочерних элементах, что размещены внутри. Если это не они, то переходим далее.

modalctr.hide();
- скрываем наш родительский контейнер, первую переменную - modalctr. То бишь нажимая вне окна, мы скрываем область, что затемняет сайт, внутри которой и лежит окно. Если у вас нет родителя, а нужно скрыть просто элемент из переменной modal. То есть строка будет иметь такой вид - modal.hide();
Далее, просто закрываем скобки.
Если вы настроите все правильно то результат не заставит себя ждать.

На этом все, спасибо за внимание.

Добавлено: 19 Июня 2019 14:04:48 Добавил: Андрей Ковальчук

Ссылка дня

Пример кода, выбирающего страницу этого дня. Завтра будет показана другая страница.

<html>
<head>
<script language="JavaScript">
function GetTodaysURL()
{
  var locationlist = new URLList
  (
        "1.html",         // Monday
        "2.html",         // Tuesday
        "3.html",
        "4.html",
        "5.html",
        "6.html",
        "7.html"          // Sunday
  );

  now = new Date();
  num = now.getDay();
  if (num == 0) num = 7;

  location.href = locationlist.list[num-1];
}

function URLList ()
{
  var argv = URLList.arguments;
  var argc = argv.length;
  this.list = new Object();
  for (var i = 0; i < argc; i++)
  this.list[i] = argv[i];
  this.count = argc;
  return this;
}
</script>
</head>
<body>
Пример кода, выбирающего
<a href="javascript:GetTodaysURL()">
страницу этого дня</a>.
Завтра будет показана другая страница.
</body>
</html>

Добавлено: 15 Июня 2019 07:04:51 Добавил: Андрей Ковальчук

PHP: Curl

Итак, Curl - это проект, целью которого является интерпретация URL и выборка из них данных, за проект Curl отвечает Дениел Стенберг (Daniel Stenberg). Почти все сценарии, использующие Curl - схожи по своему принципу:

1. создание ресурса Curl функцией curl_init
2. установку параметров с помощью функции curl_setopt
3. выполнение запроса с помощью curl_exec.

Недавно в проект Curl был добавлен так называемый мультиинтерфейс. Теперь РНР поддерживает и эти функции, но они ещё сыроваты.


void curl_close(resource curl)
Функция curl_close освобождает память, занятую ресурсом Curl,
string curlerror(resource curl)
Функция curlerror возвращает описание последней ошибки для заданного ресурса Curl.
integer curl_errno(resource curl)
Функция curl_errno возвращает номер последней ошибки, сгенерированной заданным ресурсом Curl.В таблице ниже приведены константы РНР, представляющие коды ошибок, возвращаемые функцией curl_errno()
Коды ошибок, возвращаемые CURL функциями
Константа Описание
CURLE_ABORTED_BY_CALLBACK Функция callback прервала операцию
CURLE_BAD_CALLING_ORDER Неверный порядок вызова функций
CURLE_BAD_FUNCTION_ARGUMENT Неверный параметр функции
CURLE_BAD_PASSWORD_ENTERED Введен неправильный пароль
CURLE_COULDNT_CONNECT Невозможно подключиться к узлу
CURLE_COULDNT_RESOLVE_HOST Невозможно обнаружить узел
CURLE_COULDNT_RESOLVE_PROXY Невозможно обнаружить прокси-сервер
CURLE_FAILED_INIT Ошибка инициализации
CURLE_FILE_COULDNT_READ_FILE Нельзя прочитать файл
CURLE_FTP_ACCESS_DENIED Во время FTP-операции доступ невозможен
CURLE_FTP_BAD_DOWNLOAD_RESUME Неудачное продолжение FTP-загрузки
CURLE_FTP_CANT_GET_HOST Невозможно обнаружить FTP-узел
CURLE_FTP_CANT_RECONNECT Невозможно повторно подключиться к FTP-серверу
CURLE_FTP_COULDNT_GET_SIZE Ошибка FTP-команды SIZE
CURLE_FTP_COULDNT_RETR_FILE Невозможно найти файл по FTP-соединению
CURLE_FTP_COULDNT_SET_ASCII Невозможно установить режим ASCII
CURLE_FTP_COULDNT_SET_BINARY Невозможно установить режим BINARY
CURLE_FTP_COULDNT_STOR_FILE Ошибка FTP-команды STOR
CURLE_FTP_COULDNT_USE_REST Ошибка FTP-команды REST
CURLE_FTP_PORT_FAILED Ошибка FTP-команды PORT
CURLE_FTP_QUOTE_ERROR Ошибка FTP-команды QUOTE
CURLE_FTP_USER_PASSWORD_INCORRECT Неправильная пара пользователь-пароль для FTP-соединения
CURLE_FTP_WEIRD_227_FORMAT Нераспознанный ответ на FTP-команду 227
CURLE_FTP_WEIRD_PASS_REPLY Нераспознанный ответ на FTP-команду PASS
CURLE_FTP_WEIRD_PASV_REPLY Нераспознанный ответ на FTP-команду PASV
CURLE_FTP_WEIRD_SERVER_REPLY Нераспознанный ответ FTPrcepeepa
CURLE_FTP_WEIRD_USER_REPLY Нераспознанный ответ USER FTP-протокола
CURLE_FTP_WRITE_ERROR FTP-сервер сообщает о проблемах при выполнении операций записи
CURLE_FUNCTION_NOT_FOUND Функция LDAP не найдена
CURLE_HTTP_NOT_FOUND HTTP-страница не найдена
CURLE_HTTP_POST_ERROR Ошибка HTTP-команды post
CURLE_HTTP_RANGE_ERROR Ошибка диапазона HTTP
CURLE_LDAP_CANNOT_BIND Ошибка связи библиотеки LDAP
CURLE_LDAP_SEARCH_FAILED Ошибка поиска библиотеки LDAP
CURLE_LIBRARY_NOT_FOUND Библиотека LDAP не найдена
CURLE_MALFORMAT_USER Неправильно задано имя пользователя
CURLE_OK Ошибок нет
CURLE_OPERATION_TIMEOUTED Тайм-аут операции
CURLE_OUT_OF_MEMORY Не хватает памяти
CURLE_PARTIAL_FILE Была передана только часть файла
CURLE_READ_ERROR Ошибка чтения на локальном устройстве
CURLE_SSL_CONNECT_ERROR Ошибка SSL-соединения
CURLE_SSL_PEER_CERTIFICATE Непроверенный сертификат SSL
CURLE_TOO_MANY_REDIRECTS Слишком много переадресаций
CURLE_UNKNOWN_TELNET_OPTION Задан неизвестный параметр утилиты TELNET
CURLE_UNSUPPORTED_PROTOCOL Протокол не поддерживается
CURLE_UNSUPPORTED_PROTOCOL Протокол не поддерживается
CURLE_URL_MALFORMAT Ошибочный URL
CURLE_URL_MALFORMAT_USER Ошибочный URL пользователя
CURLE_WRITE_ERROR Ошибка записи на локальном устройстве
boolean/string curl_ехес(resource curl)
Функция curl_ехес предназначена для выполнения запроса. В зависимости от параметра CURLOPT_RETURNTRANSFER функция curl_ехес возвращает логическое значение или запрашиваемые данные см. пример ниже.
CURL отправка POST запроса:
<?php
  if(!($curl = curl_init()))
  {
    exit ('Невозможно инициализировать ресурс Curl!');
  }
   
  //Настроить процессор поиска php.net для выполнения запроса post 
  curl_setopt($curl, CURLOPT_URL, 'http://www.php.net/search.php');
  curl_setopt($curl, CURLOPT_RETURNTRANSFER,  TRUE);
  curl_setopt($curl, CURLOPT_POST, TRUE);
  curl_setopt($curl, CURLOPT_POSTFIELDS, 'lang=en_US&Zend API&show=nosource');
   
  //сделать запрос
  $results = curl_exec($curl);
   
  print('<pre>');
  print(htmlentities($results));
  print ('</pre>');
?>

string curl_getinfo(resource curl, integer info)
Функция curl_getinfо применяется для поиска информации о Curl-запросе. В таблице ниже приведен перечень констант, используемых в аргументе info.
Заметьте!

Авторы Curl не стали плодить множество функций, для работы, они пошли другим путём. В скрипте используются несколько функций, а вот их поведение, и скрипта в целом, настраивается с помощью функции curl_setopt и её констант - их то как раз хренова куча! Так что Ctrl + F вам в помощь - я специально не стал разбивать материал на несколько страниц, что бы пользуясь встроенной функцией поиска, в вашем браузере, вы могли найти описание нужной константы на одной странице.

Перечень констант, используемых в аргументе curl_getinfo
Константа Описание
CURLINFO_CONNECT_TIME Время, затраченное на соединение
CURLINFO_CONTENT_LENGTH_DOWNLOAD Значение заголовка HTTP-заголовка Content-length
CURLINFO_CONTENT_LENGTH_UPLOAD Размер выгруженного файла
CURLINFO_CONTENT_TYPE Значение HTTP-заголовка Content - type
CURLINFO_EFFECTIVE_URL URL, использованный во время последнего запроса
CURLINFO_FILETIME Если Curl может определять время изменения запрошенного файла, оно может устанавливаться по временной метке Unix. Curl возвращает значение -1, если не представляется возможным получить время модификации
CURLINFO_HEADER_SIZE Длина всех HTTP-запросов в байтах
CURLINFO_HTTP_CODE HTTP-код, который возвращает сервер
CURLINFO_NAMELOOKUP_TIME Вещественное значение, отражающее время в секундах, необходимое для определения имени
CURLINFO_PRETRANSFER_TIME Вещественное значение, отражающее время в секундах, прошедшее до начала передачи
CURLINFO_REDIRECT_COUNT Количество переадресаций
CURLINFO_REDIRECT_TIME Вещественное значение, отражающее время в секундах, необходимое для всех шагов переадресации
CURLINFO_REQUEST_SIZE Размер HTTP - запроса
CURLINFO_SIZE_DOWNLOAD Общий размер загруженных данных в байтах
CURLINFO_SIZE_UPLOAD Всего выгружено байт
CURLINFO_SPEED_DOWNLOAD Скорость всех загрузок в байтах в секунду
CURLINFO_SPEED_UPLOAD Скорость всех выгрузок в байтах в секунду
CURLINFO_SSL_VERIFYRESULT Результат проверки соединения при SSL-запросе
CURLINFO_STARTTRANSFER_TIME Время, затраченное на начало передачи
CURLINFO_TOTAL_TIME Вещественное значение, отражающее время в секундах, необходимое для завершения передачи за исключением времени, необходимого для подключения
<?php
 
  //принять стартовую страницу узла Zend
  $curl = curl_init('http://www.zend.com/');
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  curl_exec($curl);
    
  //получить различную информацию
  echo 'CURLINFO_CONNECT_TIME: '.curl_getinfo($curl, CURLINFO_CONNECT_TIME).'<br />';
  echo 'CURLINFO_CONTENT_LENGTH_DOWNLOAD: '.curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD).'<br />';
  echo 'CURLINFO_CONTENT_LENGTH_UPLOAD: '.curl_getinfo($curl, CURLINFO_CONTENT_LENGTH_UPLOAD).'<br />';
  echo 'CURLINFO_CONTENT_TYPE: '.curl_getinfo($curl, CURLINFO_CONTENT_TYPE).'<br />';
  echo 'CURLINFO_EFFECTIVE_URL: '.curl_getinfo($curl,  CURLINFO_EFFECTIVE_URL).'<br />';
  echo 'CURLINFO_FILETIME: '.curl_getinfo($curl, CURLINFO_FILETIME).'<br />';
  echo 'CURLINFO_HEADER_SIZE: '.curl_getinfo($curl,  CURLINFO_HEADER_SIZE).'<br />';
  echo 'CURLINFO_HTTP_CODE: '.curl_getinfo($curl,  CURLINFO_HTTP_CODE).'<br />';
  echo 'CURLINFO_NAMELOOKUP_TIME: '.curl_getinfo($curl, CURLINFO_NAMELOOKUP_TIME).'<br />';
  echo 'CURLINFO_PRETRANSFER_TIME: '.curl_getinfo($curl,  CURLINFO_PRETRANSFER_TIME).'<br />';
  echo 'CURLINFO_REDIRECT_COUNT: '.curl_getinfo($curl,  CURLINFO_REDIRECT_COUNT).'<br />';
  echo 'CURLINFO_REDIRECT_TIME: '.curl_getinfo($curl,  CURLINFO_REDIRECT_TIME).'<br />';
  echo 'CURLINFO_REQUEST_SIZE: '.curl_getinfo($curl, CURLINFO_REQUEST_SIZE).'<br />';
  echo 'CURLINFO_SIZE_DOWNLOAD: '.curl_getinfo($curl,  CURLINFO_SIZE_DOWNLOAD).'<br />';
  echo 'CURLINFO_SIZE_UPLOAD: '.curl_getinfo($curl,  CURLINFO_SIZE_UPLOAD).'<br />';
  echo 'CURLINFO_SPEED_DOWNLOAD: '.curl_getinfo($curl,  CURLINFO_SPEED_DOWNLOAD).'<br />';
  echo 'CURLINFO_SPEED_UPLOAD: '.curl_getinfo($curl,  CURLINFO_SPEED_UPLOAD).'<br />';
  echo 'CURLINFO_SSL_VERIFYRESULT: '.curl_getinfo($curl,  CURLINFO_SSL_VERIFYRESULT).'<br />';
  echo 'CURLINFO_STARTTRANSFER_TIME: '.curl_getinfo($curl, CURLINFO_STARTTRANSFER_TIME).'<br />';
  echo 'CURLINFO_TOTAL_TIME: '.curl_getinfo($curl, CURLINFO_TOTAL_TIME).'<br />';
 
?>

resource curl_init(string url)
Функция curl_init используется для создания дескриптора ресурса Curl. Необязательный аргумент url устанавливает параметр CURLOPT_URL.
integer curl_multi_add_handle(resource multi, resource curl)
Функция curl_milti_add_handle добавляет обычный ресурс Curl в мульти ресурсный стек и возвращает код состояния.
curl_multi_close(resource multi)
Функция curl_milti_close закрывает мультиресурс Curl и вызывает функцию curl_multi_cleanup.
integer curl_multi_exec (resource multi)
Функция curl_milti_exec читает и записывает данные на все сокеты мультиресурсного стека. Вызывает функцию curl_milti_perform.
string curl_multigetcontent(resource multi)
Функция curl_multi_getcontent возвращает содержимое из мультиресурса.
array curl_multi_lnfo_read(resource multi)
Функция curl_multi_lnfo_read возвращает массив, содержащий информацию о мультиресурсе.
resource curl_milti_init()
Функция curl_milti_init возвращает ресурс, указывающий на мульти интерфейс.
integer curl_multi_remove_handle(resource multi, resource curl)
Функция curl_multi_remove_handle удаляет обычный ресурс Curl из мульти ресурсного стека. Возвращает код состояния.
curl_multi_select(resource multi, integer timeout)
Функция multi_select выполняет выбор из библиотеки языка С по набору ресурсов Curl в мульти ресурсном стеке. Передается необязательный аргумент timeout.
string curl_version()
Функция curl_version предназначена для определения версии работающей библиотеки Curl.
boolean curl_setopt(resource curl, string option, value setting)
Функция curl_setopt позволяет сделать настройку соединения Curl до выполнения функции curl_exec. Необходимо передавать дескриптор ресурса Curl, созданного функцией curl_init. В таблице ниже, перечислены константы для этой функции
Константа Описание
CURLOPT_BINARYTRANSFER Используется с параметром, CURLOPT_RETURNTRANSFER. Это гарантирует возвращение двоичного значения
CURLOPT_CAINFO Указывает путь к файлу, содержащему один и более сертификатов, необходимых для проверки другого узла. Этот параметр действует только вместе с параметром CURLOPT_SSL_VERIFYPEER
CURLOPT_CAPATH Указывает путь к файлу, содержащему один или более сертификатов, необходимых для проверки другого узла. Этот параметр действует только вместе с параметром CURLOPT_SSL_VERIFYPEER
CURLOPT_CLOSEPOLICY Используется для установки политики закрытия соединения при его заполнении. Может иметь значение CURLCLOSEPOLICY_LEAST_RECENTLY_USED или CURLCLOSEPOLICY_OLDEST
CURLOPT_CONNECTTIMEOUT Задает максимальное время ожидания соединения в секундах
CURLOPT_COOKIE Используется для задания файлов cookie в запросе. Он задается в виде строки со знаком равенства между именем файла cookie и значением value. Имена файлов cookie разделяются точкой с запятой. Например, cookiel=valueA; cookiel=valueB задает два файла cookie: cookiel и cookie2
CURLOPT_COOKIEFILE Путь, по которому размещаются файлы cookie по запросам. Этот файл может соответствовать формату Netscape Navigator или обычному формату HTTP-заголовка
CURLOPT_COOKIEJAR Задает путь к файлу, в котором сохраняются файлы cookie. Curl сохраняет любые файлы cookie, которые он получает во время запроса к этому файлу. Затем этот файл можно указывать в параметре CURLOPT_COOKIEFILE
CURLOPT_CRLF При значении TRUE Curl преобразует символы новой строки, характерные для ОС Unix, в пары символов "возврат каретки перевод строки"
CURLOPT_CUSTOMREQUEST Используется для отсылки альтернативной команды при HTTP-запросе. В нем указывается только команда, а не вся строка запроса
CURLOPT_DNS_CACHE_TIMEOUT Параметр работы с кэшем поиска имен узлов. В нем задается время хранения имени в кэше (в секундах)
CURLOPT_DNS_USE_GLOBAL_CACHE При значении TRUE Curl разделяет кэш поиска имен узлов. Этот параметр не является защищенным с точки зрения потоков
CURLOPT_EGDSOCKET Задает путь к сокету Entropy Gathering Daemon. Curl использует его в качестве генератора случайных чисел, который используется для SSL
CURLOPT_FAILONERROR При значении TRUE коды HTTP-ответов больше 300 не приводят к возвращению страниц, обычно возвращаемых сервером
CURLOPT_FILE Предназначен для вывода сообщений в файл, а не в браузер
CURLOPT_FILETIME При значении TRUE Curl делает попытку получить время модификации запрошенного файла
CURLOPT_FOLLOWLOCATION При значении TRUE Curl просматривает заголовки переадресации, возвращаемые HTTP-серверами. Установите в TRUE, что бы Curl следовал редиректам.
CURLOPT_FORBID_REUSE При значении TRUE Curl закрывает соединение после завершения обработки запроса
CURLOPT_FRESH_CONNECT При значении TRUE Curl независимо от наличия соответствующего соединения в кэше создает новое соединение
CURLOPT_FTPAPPEND При значении TRUE Curl при операции FTP выгрузки, вместо перезаписи выполняет добавление
CURLOPT_FTPLISTONLY При значении TRUE Curl возвращает перечень файлов, хранящихся в FTP-каталоге
CURLOPT_FTPPORT Задает настройки FTP-команды PORT, при этом запрашивается соединение с сервером. В этом параметре указываются IP-адрес, имя узла, имя сетевого интерфейса. Для использования адреса, используемого по умолчанию, указывается -
CURLOPT_FTP_USE_EPSV По умолчанию, при FTP-передачах в пассивном режиме, Curl использует команду EPSV. Для того чтобы запретить использование этой команды, данный параметр должен иметь значение FALSE
CURLOPT_HEADER При значении TRUE Curl включает в вывод заголовки
CURLOPT_HEADERFUNCTION Задает имя функции, которую вызывает Curl для каждого вызванного HTTP-заголовка. Эта функция должна принимать два аргумента: ресурс Curl и строку, содержащую полный заголовок
CURLOPT_HTTPGET При значении TRUE Curl в HTTP-передачах использует метод GET. Это может понадобиться только при повторном использовании ресурса Curl
CURLOPT_HTTPHEADER Позволяет отправить HTTP-заголовки, прописанные вручную. Заголовки должны быть помещены в массив
CURLOPT_HTTPPROXYTUNNEL При значении TRUE Curl передает все запросы, пользуясь туннелем на прокси-сервере
CURLOPT_HTTP_VERSION Используется для того, чтобы вынудить Curl использовать соответствующую версию протокола HTTP. Значение CURL_HTTP_VERSION_NONE задается, если право выбора предоставляется Curl. Для того чтобы использовалась версия HTTP/1.0, необходимо задать значение CURL_HTTP_VERSION_1_0. Для того чтобы использовалась версия HTTP/1.1, необходимо задать значение CURL_HTTP_VERSION_l_l
CURLOPT_INFILE Если в этом параметре указан открытый файловый поток, то Curl будет считывать туда ввод из файла
CURLOPT_INFILESIZE Используется для определения размера выгружаемого файла
CURLOPT_INTERFACE Задает имя используемого интерфейса. Можно задавать имя интерфейса, имя узла или IP-адрес
CURLOPT_KRB4LEVEL Для FTP-передач с помощью этого параметра можно указать уровень безопасности Kerberos. Значением этого параметра могут быть такие строки: clear, safe, confidential и private. Установка значения FALSE отключит безопасность Kerberos
CURLOPT_LOW_SPEED_LIMIT Используется для снижения ограничения скорости передачи, которая задается в байтах в секунду. Если скорость передачи упадет ниже предела, заданного параметром CURLOPT_LOW_SPEED_TIME, Curl прервет передачу
CURLOPT_LOW_SPEED_TIME Предназначен для снижения ограничения скорости передачи и используется с параметром CURLOPT_LOW_SPEED_LIMIT
CURLOPT_MAXCONNECTS Задает размер кэша соединения
CURLOPT_MAXREDIRS Используется для задания максимального количества переадресаций
CURLOPT_MUTE При значении TRUE PHP не генерирует вывод на браузер при выполнении функций Curl
CURLOPT_NETRC При значении TRUE Curl при аутентификации пользователей просматривает путь ~/.netrc
CURLOPT_NOBODY При значении TRUE Curl исключает из вывода основное тело HTTP-страницы
CURLOPT_NOPROGRESS При значении FALSE Curl отображает индикатор работы. По умолчанию этот параметр имеет значение TRUE
CURLOPT_PASSWDFUNCTION Используется для указания имени функции обработки запросов паролей. Эта функция должна принимать три аргумента: ресурс Curl, подсказку пароля, отправленную сервером, и ссылку, куда необходимо поместить пароль. Эта функция возвращает нуль в случае успешного завершения работы и значение, отличное от нуля, в случае возникновения ошибки. Для восстановления стандартной функциональности для этого параметра устанавливается значение FALSE
CURLOPT_PORT Используется для задания номера порта, применяемого в запросах
CURLOPT_POST При значении TRUE Curl делает HTTP-запрос POST с помощью кодировки application/x-www-form-urlencoded
CURLOPT_POSTFIELDS Предназначен для передачи всех данных операции post. Поля форматируются строго в соответствии с порядком приема. Например, строка apple=l&ball=red&cat=45.56 будет соответствовать трем полям: apple, ball и cat
CURLOPT_POSTQUOTE Передает массив FTP-команд, выполняемых после главного запроса
CURLOPT_PROXY Устанавливается на прокси-сервере
CURLOPT_PROXYUSERPWD Используется для установки имени пользователя и его пароля, необходимых для прокси-сервера. При этом используется формат username; password
CURLOPT_PUT При значении TRUE Curl выполняет HTTP-запрос PUT. При этом необходимо задавать параметры CURLOPT INFILE и CURLOPT INFILESIZE
CURLOPT_QUOTE Задает массив FTP-команд, выполняемых до главного запроса
CURLOPT_RANDOM_FILE Задает путь к файлу, который будет читать Curl для задания начальных значений генератора случайных величин SSL
CURLOPT_RANGE Используется для задания диапазона заголовка, отправленного HTTP-сервером. Передается строка, содержащая смещение начала и конца строки в байтах, разделенные тире. При указании нескольких диапазонов они разделяются запятыми, например 100-150,233-502. О диапазонах можно узнать подробнее в спецификации протокола HTTP 1.1
CURLOPT_READFUNCTION Задает имя функции передачи данных другой стороне соединения. Эта функция должна принимать два аргумента: ресурс Curl и строку ссылки. Копирует данные в строку ссылки и возвращает количество байт. Возвращение нулевого значения свидетельствует о достижении конца файла
CURLOPT_REFERER Используется для задания значения поля Ref erer, передаваемого в HTTP-запросах
CURLOPT_RESUME_FROM Предназначен для возобновления передачи. Смещение задается в байтах
CURLOPT_RETURNTRANSFER Обычно Curl отправляет результаты команд непосредственно в браузер. Для получения результатов в виде возвращаемого значения утилиты curl_exec для этого параметра устанавливается значение TRUE
CURLOPT_SSLCERT Задает путь к сертификату SSL в формате РЕМ (Privacy Enhanced Mail)
CURLOPT_SSLCERTPASSWD Задает пароль, необходимый для чтения сертификата SSL, заданного параметром CURLOPT_SSLCERT
CURLOPT_SSLENGINE Задает имя процессора SSL, который будет использоваться для частных ключей
CURLOPT_SSLENGINE_DEFAULT Задает имя процессора SSL, который будет использоваться в большинстве случаев, исключая частные ключи
CURLOPT_SSLKEY Задает путь к частному ключу. По умолчанию задается тип РЕМ, который может быть изменен параметром CURLOPT_SSLKEYTYPE
CURLOPT_SSLKEYPASSWD Задает пароль, необходимый для использования с частным ключом, заданным параметром CURLOPT_SSLKEY
CURLOPT_SSLKEYTYPE Задает тип частного ключа, заданного параметром CURLOPT_SSLKEY. Тип определяется одной из следующих строк: РЕМ, DER или ENG
CURLOPT_SSLVERSION Предназначен для активизации второй или третьей версии SSL. Обычно Curl "угадывает" соответствующую версию протокола
CURLOPT_SSL_CIPHER_LIST Используется для определения списка шифров, которые будут использоваться при SSL-соединениях. Названия шифров разделяются точкой с запятой. Этот список задается в процессе компиляции OpenSSL
CURLOPT_SSL_VERIFYHOST Для этого параметра устанавливается значение 1, если Curl проверяет имя сертификата SSL, или значение 2, для того чтобы было достаточно простого совпадения с именем узла
CURLOPT_SSL_VERIFYPEER При значении TRUE Curl делает попытку проверить идентичность соединения с помощью сертификатов, заданных параметром CURLOPT_CAINFO
CURLOPT_STDERR Задает открытый файловый поток, куда будут перенаправлены сообщения об ошибках
CURLOPT_TIMECONDITION Предназначен для активизации условий передачи на основании анализа времени последней модификации удаленного файла. Для задания временного значения, которое будет использоваться для проверки этого условия, используется параметр CURLOPT_TIMEVALUE. Для соблюдения требования модификации файла с определенного момента времени используется параметр TIMECOND_IFMODSINCE. Для соблюдения требования отсутствия изменений файла с определенного момента времени используется параметр TIMECOND_ISUNMODSINCE
CURLOPT_TIMEOUT Задает максимальное время в секундах, на протяжении которого может выполняться Curl-операция
CURLOPT_TIMEVALUE Устанавливает время в стандартном формате временной метки Unix, который используется параметром CURLOPT_TIMECONDITION
CURLOPT_TRANSFERTEXT При значении TRUE Curl осуществляет FTP-передачи в формате ASCII и в тексте в формате LDAP вместо HTML
CURLOPT_UPLOAD При значении TRUE Curl выполняет НТТР-выгрузку. Необходимо установить CURLOPT_INFILE и CURLOPT_INFILESIZE
CURLOPT_URL Задает исполняемый URL. Этот параметр можно установить и с помощью утилиты curl_init
CURLOPT_USERAGENT Устанавливает значение поля User-agent, переданное в HTTP-запросах
CURLOPT_USERPWD Задает имя пользователя и его пароль, необходимый для соединения. При этом используется формат username:password
CURLOPT_VERBOSE При значении TRUE Curl выводит сообщение о состоянии
CURLOPT_WRITEFUNCTION Задает имя функции, которая будет получать данные при указанном соединении. Эта функция принимает два аргумента: ресурс Curl и строку данных. Она возвращает количество обработанных байтов данных. Если возвращаемое значение не соответствует количеству переданных данных, Curl сообщает об ошибке
CURLOPT_WRITEHEADER Задает открытый файловый поток, который будет получать заголовки. Значением option задается ресурс, возвращаемый функцией fopen

Добавлено: 14 Июня 2019 20:12:48 Добавил: Андрей Ковальчук

Трехмерные формы с изменяющимися размерами

Попробуйте нижеприведенные обработчики событий WMNCPaint и WMNCHitTest.

При этом форма должна иметь свойство BorderStyle равным Sizeable, так как код использует область границ для создания 3D эффекта и предоставляет пользователю возможность изменения размера формы.

Для запрещения изменения размеров формы вы должны включить обработчик события WMNCHitTest, для обратного эффекта не включайте его в ваш код.


procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);
var
  DC: HDC;
  Frame_H: Integer;
  Frame_W: Integer;
  Menu_H: Integer;
  Caption_H: Integer;
  Frame: TRect;
  Extra: Integer;
  Canvas: TCanvas;
begin
  { Задаем значения некоторым параметрам окна }
  Frame_W := GetSystemMetrics(SM_CXFRAME);
  Frame_H := GetSystemMetrics(SM_CYFRAME);
  if (Menu <> nil) then
    Menu_H := GetSystemMetrics(SM_CYMENU)
  else
    Menu_H := -1;
  Caption_H := GetSystemMetrics(SM_CYCAPTION);
  GetWindowRect(Handle, Frame);
  Frame.Right := Frame.Right - Frame.Left - 1;
  Frame.Left := 0;
  Frame.Bottom := Frame.Bottom - Frame.Top - 1;
  Frame.Top := 0;
  { Позволяем нарисовать стандартные границы формы }
  inherited;
  { Перерисовываем область границ в 3-D стиле }
  DC := GetWindowDC(Handle);
  Canvas := TCanvas.Create;
  try
    with Canvas do
    begin
      Handle := DC;
      { Левая и верхняя граница }
      Pen.Color := clBtnShadow;
      PolyLine([Point(Frame.Left, Frame.Bottom), Point(Frame.Left, Frame.Top),
        Point(Frame.Right, Frame.Top)]);
      { Правая и нижняя граница }
      Pen.Color := clWindowFrame;
      PolyLine([Point(Frame.Left, Frame.Bottom),
        Point(Frame.Right, Frame.Bottom),
          Point(Frame.Right, Frame.Top - 1)]);
      { Левая и правая граница, 1 пиксел скраю }
      Pen.Color := clBtnHighlight;
      PolyLine([Point(Frame.Left + 1, Frame.Bottom - 1),
        Point(Frame.Left + 1, Frame.Top + 1),
          Point(Frame.Right - 1, Frame.Top + 1)]);
      { Правая и нижняя граница, 1 пиксел скраю }
      Pen.Color := clBtnFace;
      PolyLine([Point(Frame.Left + 1, Frame.Bottom - 1),
        Point(Frame.Right - 1, Frame.Bottom - 1),
          Point(Frame.Right - 1, Frame.Top)]);
      { Разность области изменяемых границ }
      for Extra := 2 to (GetSystemMetrics(SM_CXFRAME) - 1) do
      begin
        Brush.Color := clBtnFace;
        FrameRect(Rect(Extra, Extra, Frame.Right - Extra + 1, Frame.Bottom -
          Extra + 1));
      end;
      { Левая и верхняя граница области заголовка }
      Pen.Color := clBtnShadow;
      PolyLine([Point(Frame_W - 1, Frame_H + Caption_H + Menu_H - 1),
        Point(Frame_W - 1, Frame_H - 1),
          Point(Frame.Right - Frame_W + 1, Frame_H - 1)]);
      { Левая и верхняя граница области заголовка }
      Pen.Color := clBtnHighlight;
      PolyLine([Point(Frame_W - 1, Frame_H + Caption_H + Menu_H - 1),
        Point(Frame.Right - Frame_W + 1, Frame_H + Caption_H + Menu_H - 1),
          Point(Frame.Right - Frame_W + 1, Frame_H - 1)]);
    end;
  finally
    Canvas.Free;
    ReleaseDC(Handle, DC);
  end; { try-finally }
end;

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
var
  HitCode: LongInt;
begin
  inherited;
  HitCode := Msg.Result;
  if ((HitCode = HTLEFT) or (HitCode = HTRIGHT) or
    (HitCode = HTTOP) or (HitCode = HTBOTTOM) or
    (HitCode = HTTOPLEFT) or (HitCode = HTBOTTOMLEFT) or
    (HitCode = HTTOPRIGHT) or (HitCode = HTBOTTOMRIGHT)) then
  begin
    HitCode := HTNOWHERE;
  end;
  Msg.Result := HitCode;
end;

Добавлено: 22 Февраля 2019 07:41:14 Добавил: Андрей Ковальчук

Как вытащить слова из текста?

Это регулярное выражение PHP разбирает текст на отдельные слова, основываясь на определении: слово - это непрерывная последовательность букв английского или русского алфавитов.

$x="Типа, %^& читайте___люди~~~~__маны__  На... РУССКОМ!! Будете+здоровы.  abc, qwe, zxc";
preg_match_all('/([a-zA-Zа-яА-Я]+)/',$x,$ok);
for ($i=0; $i<count($ok[1]); $i++) echo $ok[1][$i]."<br>";

Результат будет таким:
Типа читайте люди маны На РУССКОМ Будете здоровы abc qwe zxc

Добавлено: 08 Августа 2018 08:29:33 Добавил: Андрей Ковальчук