Блог программиста
11 добавил: 1/19/2012 6:04:50 PM

Написал свой "просмоторщик" для картинок.
То есть скрипт на JavaScript, который позволяет увеличить маленькое изображение и отобразить его по центру экрана.
Для этого нужно скачать архив по ссылке

http://www.alexalex.ru/SimplestImageViewer.zip

Распаковать содержимое в папку на вашем сайте.
и добавить в <head></head> страницы ссылки на скрипт и стиль CSS

<'link rel="stylesheet" href="ImageViewer.css" type="text/css">
<script src="ImageViewer.js" type="text/javascript">


Далее можно вызывать просмотр при клике на маленькую картинку с помощью функции JavaScript
Например:

onclick="show('FullSizeImage1.jpg')"

В чем преимущество моего вьювера картинок перед другими - это то что код относительно прост и вы можете изменить его сами на свой вкус.
А как вас зовут?

Добавить комментарий

12 добавил: 2/5/2012 5:25:42 PM

  Как передать в стандартный метод события event дополнительные параметры или значения переменных

Опять долго рыскал по просторам англоязычного интернета, но ответ было найти не так уж и легко.
Хотя кое-что и навело меня на решение.
Пусть и на просторах русскоязычного веба также будет ответ на этот вопрос.
Для этого можно использовать как делегаты ( .Net 2.0 ) так и лямбда выражения ( .Net 3.0 )
Вот два примера того, как в стандартное событие окончания анимации storyboard можно добавить параметр,
принимающий булево значение.
Кстати, это и очень наглядный пример использования лямбда выражений.

storyboard.Completed += (s, e) => storyboard_Completed(s, e, greencolor);

storyboard.Completed += delegate(object s, EventArgs e) { storyboard_Completed(s, e, true); };


Здесь мы добавляем новый new EventHandler в виде процедуры storyboard_Completed, которая обычно принимает
два значения: sender и EventArgs.

Вот процедура, вызываемая по окончании storyboard:

void storyboard_Completed(object sender, EventArgs e, bool greencolor)
{
// можете здесь разместить нужный код
}



Как видите, в нашем случае мы можем передать еще и дополнительный bool параметр greencolor.
Конечно же, тип передаваемого параметра может быть и другим.
Параметры s и e не используются в коде, поэтому я их оставил для того чтобы хоть что-то передать процедуре.
Конструктор-то требует хоть какого-то значения... Можно передавать и что-то более полезное.
А как вас зовут?

Добавить комментарий

13 добавил: 2/8/2012 8:34:06 PM отредактировал: 3/1/2012 9:26:15 PM

Ваш собственный просмотрощик картинок


Решил я обновить свой сайт и сделать его более похожим на Web 2.0
Для начала не нравилось мне то, что картинки для просмотра открывались у меня в новом окне.
Пошел я в интернет и стал там искать что-то готовое и бесплатное.
Нашел несколько вариантов, но то не хватает поддержки браузеров, то сильно нагруженный скриптами.
Я решил сделать что-то свое.
Мало-ли вдруг мне понадобится сделать диалоговое окно авторизации, например.


Что нам для этого нужно:
1. Картинка для фона с полупрозрачностью ( то есть лучше всего для этого подойдет png формат )

2. Анимация для отображения во время загрузки основной картинки.
Уж не помню на каком сайте я создавал свою, но вот сайт http://www.preloaders.net/ довольно неплохо в этом помогает.

3. файл с css

4. файл с javascript

Файл со стилями довольно простой:

#curtain {
position: fixed;
z-index:5;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: url(curtain.png);
}


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

#overlay{
position:absolute;
top:50%;
left:50%;
background-color:#000000;
z-index:10;
overflow:hidden;
width:400px;
height:400px;
margin-left:-200px;
margin-top:-200px;
visibility:visible;
}


Это стиль для блока DIV в котором будет расположена картинка.

#loading{
position:absolute;
top:50%;
left:50%;
z-index:10;
visibility:visible;
}


Небольшой стиль для картинки анимации таймера загрузки.

#kartinka{
display: block;
margin-left: auto;
margin-right: auto;
visibility:collapse;

}


И, наконец, для самой картинки.


Теперь пробежимся по JavaScript.
Сперва идет объявление глобальных переменных:

var curtain;
var overlay;
// Это объекты - элементы html страницы создаваемые на лету.

var viewportwidth;
var viewportheight;
// ширина и высота видимой части экрана - вьюпорта

Эти ширину и высоту мы получаем вызвав функцию

function getViewPort(){
 // более-менее стандартные браузеры mozilla/netscape/opera/IE7 используют window.innerWidth и window.innerHeight
if (typeof window.innerWidth != 'undefined')
{
viewportwidth = window.innerWidth,
viewportheight = window.innerHeight
 }
// специально для IE6
else if (typeof document.documentElement != 'undefined'
&& typeof document.documentElement.clientWidth !=
'undefined' && document.documentElement.clientWidth != 0)
{
viewportwidth = document.documentElement.clientWidth,
viewportheight = document.documentElement.clientHeight
 }
 // для более старых версий IE
else
{
viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
viewportheight = document.getElementsByTagName('body')[0].clientHeight
 }
}

Вот эта функция вешает "занавеску" на экран. То есть затемняет фон полупрозрачным изображением:

function shadow() {
curtain = document.body.appendChild( document.createElement('div') );
curtain.style.height=getDocHeight()+'px';
curtain.style.width=getDocWidth()+'px';
curtain.id = "curtain";
}

Эта функция собственно создает тэг для картинки и контейнера:

function imageDiv() {

overlay = document.body.appendChild( document.createElement('div') );
overlay.id="overlay";
var im=document.getElementById('overlay').appendChild( document.createElement('img') );
im.id="kartinka";

var lo=document.body.appendChild( document.createElement('img') );
lo.id="loading";

overlay.onkeypress = overlay.onclick = lo.onclick = function(){

lo.parentNode.removeChild(lo);
im.parentNode.removeChild(im);
overlay.parentNode.removeChild(overlay);
curtain.parentNode.removeChild( curtain );

}
}


Эти функции получают позицию прокрутки по горизонтали и вертикали:


function getScrollTop() {
var ScrollTop = document.body.scrollTop;
if (ScrollTop == 0)
{
if (window.pageYOffset)
ScrollTop = window.pageYOffset;
else
ScrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
}
return ScrollTop;
}

function getScrollLeft() {
var ScrollLeft = document.body.scrollLeft;
if (ScrollLeft==0)
{
if (window.pageYOffset){
ScrollLeft = window.pageXOffset;
}
else{
ScrollLeft = (document.body.parentElement) ? document.body.parentElement.scrollLeft : 0;
}
}
return ScrollLeft;
}


Ну и, наконец, самая главная функция, которая использует все предыдущие:

function show(s) {
shadow();
getViewPort();
imageDiv();

var ima=document.getElementById('kartinka');
var loa=document.getElementById('loading');
overlay.style.visibility='hidden';
loa.style.top=viewportheight/2+getScrollTop()+'px';
loa.style.left=viewportwidth/2+getScrollLeft()+'px';
loa.style.visibility='visible';
loa.src='loading.gif';


ima.onload=function(){
var h=ima.offsetHeight;
var w=ima.offsetWidth;
overlay.style.width=(w)+'px';

overlay.style.height=(h)+'px';


overlay.style.top=viewportheight/2+getScrollTop()+'px';

overlay.style.left=viewportwidth/2+getScrollLeft()+'px';


if ((viewportwidth>w)&&(viewportheight>h)){
overlay.style.marginLeft=(-(w/2))+'px';
overlay.style.marginTop=(-(h/2))+'px';
}
else if ((viewportwidth<w)&&(viewportheight>h)){
overlay.style.marginLeft='0px';
overlay.style.marginTop=(-(h/2))+'px';
overlay.style.left=getScrollLeft()+'px';
}
else if ((viewportwidth>w)&&(viewportheight<h)){
overlay.style.marginTop='0px';
overlay.style.top=getScrollTop()+'px';
overlay.style.marginLeft=(-(w/2))+'px';
}
else{
overlay.style.marginLeft='0px';
overlay.style.left=getScrollLeft()+'px';
overlay.style.marginTop='0px';
overlay.style.top=getScrollTop()+'px';
}
overlay.style.visibility='visible';
ima.style.visibility='visible';
loa.style.visibility='hidden';
}
ima.src=s;
}


Для того, чтобы использовать просмоторщик картинок нужно добавить в head ссылки на эти два файла css и js

<'link rel="stylesheet" href="ImageViewer.css" type="text/css">
<script src="ImageViewer.js" type="text/javascript">


И вотом вызывать функцию show с относительным адресом картинки


onclick="show('largeImage325.jpg');"
А как вас зовут?

Добавить комментарий

14 добавил: 2/20/2012 6:36:30 PM отредактировал: 2/21/2012 2:51:55 PM

Подключение к Oracle из Visual Studio 2010

Решил опробовать работу с базами Oracle. Установил бесплатную версию Express Edition.

Создал пользователя и таблицу для теста работы.

В VS 2010 стал пытаться добавить ссылку на System.Data.OracleClient. Долго ли коротко ли пытался, да вот не получалось. Пошел в чисто поле гуглить, и только тут догадался, что приложение-то у меня компилируется под .Net 4.0 Client Profile а не под полноценный framework.

Исправил и обнаружил. что поддержка драйвера для Oracle в будущем будет прекращена... Добро пожаловать к сторонним провайдерам доступа .Net  к Oracle. Вариантов было много, но решил остановиться на родном - ODAC with Oracle Developer Tools for Visual Studio от опять же Oracle.

К счастью там же нашел очень хорошее описание использования вот она ссылка.

Сделал все как положено и получил "в виде исключения" ошибку:

ORA-12154: TNS:could not resolve the connect identifier specified   

Информации в англоязычном сегменте интернета об этой ошибке много, но добавлю в русскоязычный решение от себя. 

Недавно ставил вручную клиента и помню, что в переменных средах должно быть значение Path - проверил. Все на месте. Инсталлятор сам добавил путь к папке клиента. Но вот оказалось кое-что не добавил. Пришлось самому создать системную переменную TNS_ADMIN

в которой указать путь к папке \NETWORK\ADMIN ( в моем случае C:\oraclexe\app\oracle\product\10.2.0\server\NETWORK\ADMIN )

Смотрите картинку:

И все заработало!

А как вас зовут?

Добавить комментарий

15 добавил: 3/4/2012 3:28:28 PM отредактировал: 3/4/2012 3:43:16 PM

Выборка данных из базы Oracle с помощью PHP

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


<?php
$conn = oci_connect('alex', '1', 'XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT * FROM persons');
oci_execute($stid);

while (($row = oci_fetch_array($stid, OCI_BOTH))) {
// Use the uppercase column names for the associative array indices
echo $row[0] . " number ";
echo $row[1] . " surname
\n";
}

oci_free_statement($stid);
oci_close($conn);
?>


Но очень вероятно, что будет выкинута ощибка "Call to undefined function: ora_logon()/ ocilogon()"

В чем же дело? А дело в том, что PHP не использует правильный модель расширения.

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

--with-oracle=/path/to/oracle/home/dir 
 --with-oci8=/path/to/oracle/home/dir 

На системах Windows просто раскомментируйте следующие строчки в файле php.ini : 
;extension = php_oci8.dll
;extension = php_oracle.dll

А как вас зовут?

Добавить комментарий

«  1 2 3 4 5 6 7  ...  » 

На сайт AlexAlex.ru