Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор выноски на рисунке 
:(
    Опции темы
kedicik
Дата 16.5.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Можно ли реализовать след задачу? Есть рисунок . На нем какие-то выноски к деталям (назовем так). Как выделить выноску на рисунке? И прочитать что выделено? Можно ли это сделать с помощью  ImageMap? 
PM MAIL   Вверх
Mymik
Дата 16.5.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



kedicik, преобразование рисунка в текст. Это очень сложные и трудоемкие процессы. Алгоритмы дорого стоят. А реализация ихняя еще дороже. Стандартных функция распознавания текста из рисунка нет. Если где-нибудь найдешь бесплатную библию для распознавания текста -- поделись, мы все будем очень и очень благодарны столь щедрому подарку.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 17.5.2007, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Я имела ввиду не распознавание текста. А если сделать на рисунке хот споты и выделять их. Мне без разницы текст или нет. Какие-то части на рисунке. Я это имела ввиду. Вот прочитала про ImageMap/ Там есть хот споты. Просто если это и возможно то если имедж идет их бд? Тогда на нем надо уже заранее проставить хот споты. Или вообще это не реализуется?
PM MAIL   Вверх
Mymik
Дата 17.5.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



kedicik, Нет, ты ж всегда можешь определять RectangleHotSpot для своего ImageMap.
Сам по себе ImageMap должен иметь ссылку на картинку. Вот ты и забираешь картинку из СУБД.
Ну и соответственно после этого ты можешь (если ты используешь GridView/DataGrid, Repeater или DataList) прикрепится к *DataBound и там подсовывать к этому ImageMap разные HotSpot
Код

imageMap.Areas.Add(new ImageMapRectangleArea("http://forum.vingrad.ru/", new Rectangle(405, 188, 15, 15), "Go To Our Forum"));

Конечно, было б классно хранить в отдельной таблице в базе тип HotSpot'а, ссылку куда он ведет, его разметку и ToolTip. типа по ID картинки забираешь из таблицы все данные для HotSpot'а и генерируешь их на ходу.

Добавлено через 1 минуту и 7 секунд
Да. Ну а если не используешь что-то типа GridView/DataGrid, Repeater или DataList Тогда ты можешь подсовывать прямо в Page_Load


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 17.5.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Все получилось Да я согласна! Хранить в бд координаты. Жалко что не выделяется хот спот при щелчке. Хорошо бы наложить на него как бы слой при щелчке. А при повторном удалить его. Типа прорисовать прямоугольник. Как нить можно?
PM MAIL   Вверх
Mymik
Дата 17.5.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Если очень захотеть. То можно
Код

<asp:ImageMap ID="imTest" style="text-align:left;" ImageUrl="~/P5010001.JPG" runat="server" />

JS Функция отвечающая за рисование прямоугольника. (Другие фигуры было очень лень рисовать)
Код

            /* Рисуем */
        function setDiv(x,y,w,h,s,im)
        {
                /* собственно вот так вот и рисуем */
            document.body.innerHTML += '<div onclick="this.parentNode.removeChild(this);" style="position:absolute;z-index:100;'+
                'left:' + (x) + 'px;'+
                'top:' + (y) + 'px;'+
                'width:' + (w-s*2) + 'px;'+
                'height:' + (h-s*2) + 'px;'+
                'border:solid '+s+'px red;'+
                'background:url(\'' + im + '\') ' + (-x) + 'px ' + (-y) + 'px;'+
                (!(document.all) ? ';overflow:hidden' : '')+
                ';"><\/div>';
        }
        /* Вызываем функцию */
        function drawRect(x, y, w, h, im)
        {
            var s = 2;/* размер борюра */
            this.setDiv(x, y, w, h, s, im);
        }

А в behind-code добавляем вот так вот
Код

        RectangleHotSpot rect = new RectangleHotSpot();
        rect.Top = 100;
        rect.Left = 20;
        rect.Right = 50;
        rect.Bottom = 150;
        rect.NavigateUrl = "javascript:drawRect(" + rect.Left.ToString() + "," + rect.Top.ToString() + "," + ((int)(rect.Right - rect.Left)).ToString() + "," + ((int)(rect.Bottom - rect.Top)).ToString() + ",'" + ResolveUrl(imTest.ImageUrl) + "');";
        imTest.HotSpots.Add(rect);



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 17.5.2007, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Спасибо попробую завтра на работе.
PM MAIL   Вверх
kedicik
Дата 18.5.2007, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



На открытие страницы сделала 2 хотспота. При клике по ним выводятся прямоугольники. При повторном они исчезают. Все правильно. Теперь мне нужно куда-нить сохранить какие споты у меня выделены. Мне нужно загнать в серверную лебел. Но я из джавы не вижу лебел. Может я не умею ее найти. Я могу найти только html inputtext/ туда я засылаю. Но я должна сделать его невидимым. Но после этого он у меня не может найтись в документе в джаве.

Добавлено через 3 минуты и 39 секунд
я вообще джаву плохо знаю. Вообще в джаве можно обращаться к серверным контролам? напр лебелам?  И интересна 1 вещь. На этом Image Map у меня еще 2 спота которые я создала обычным способом. После клика и высвечивания прямоуг клик по Image map  не идет. Т есть по другим спотам ничего не работает

Добавлено через 6 минут и 42 секунды
или это влияет слой который наложился на мап?

Добавлено через 9 минут и 17 секунд
ну а вообще меня давно интересует союз джавы и visualbasic.net  почему из джавы никак нельзя обновить какое-нибудь поле текстовое типа asp:Label
PM MAIL   Вверх
Mymik
Дата 18.5.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(kedicik @  18.5.2007,  17:58 Найти цитируемый пост)
Мне нужно загнать в серверную лебел. Но я из джавы не вижу лебел. 

kedicik, все можно спокойно найти. Просто открой код сгенерированной страницы и ты увидишь что там ID разные. И потом. В input записываются данные с помощью value. А в Label через innerHTML это разные объекты, у них разные свойства ;о).
Чтобы найти объект, надо использовать document.getElementById('<ID контрола>'). Но эта <ID контрола> отличается от серверной (практически всегда) и потом в выходном потоке надо вписывать .ClientID серверного контрола.
Вот описание Label
Код

<asp:Label ID="lblTest" runat="server"/>

А вот так ты сможешь найти этот объект на клиенте
Код

lbl = document.getElementById('<%=lblTest.ClientID %>');

<%=lblTest.ClientID %> вписывает в выводном потоке клиентский ID твоего серверного контрола.
Цитата(kedicik @  18.5.2007,  17:58 Найти цитируемый пост)
Вообще в джаве можно обращаться к серверным контролам? напр лебелам?

Ну-у-у... теоретически сервер и клиент разделены и недоступны. Только лишь с помощью элементов которые отправляют данные на сервер, они могут взаимодействовать. (ну это если ты не будешь писать сама писать пакеты запросов к серверу)
Цитата(kedicik @  18.5.2007,  17:58 Найти цитируемый пост)
Но я должна сделать его невидимым. Но после этого он у меня не может найтись в документе в джаве.

А как ты делаешь его невидимым ??? случайно не через Visible="false" ??? вообще-то это свойство убирает этот элемент из выходного потока... ну он генерируется, но в выходной поток данных он не поподает. Используй HiddenField или делай для своего TextBox display:none в стилях. Но первое лучше ;о).
Цитата(kedicik @  18.5.2007,  17:58 Найти цитируемый пост)
И интересна 1 вещь. На этом Image Map у меня еще 2 спота которые я создала обычным способом. После клика и высвечивания прямоуг клик по Image map  не идет. Т есть по другим спотам ничего не работает

А что такое обычный способ ???
Цитата(kedicik @  18.5.2007,  17:58 Найти цитируемый пост)
ну а вообще меня давно интересует союз джавы и visualbasic.net  почему из джавы никак нельзя обновить какое-нибудь поле текстовое типа asp:Label 

Все можно. Я описал выше. Но на сервере ты этих изменений не увидишь. Потому что Label не отправляет данные на сервер. Это просто статический текст обрамленный <span></span> и все.
Постят данные на сервер только те контролы, которые обязаны это делать.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 18.5.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



А что такое обычный способ ???
Ну я имею ввиду что я создала 2 спота в конструкторе а не программно как вы мне написали. То есть есть2 спота с джавой и 2 спота обычных.  Все 4 спота есть после загрузки страницы. Если я не кликаю по тем спотам где выводятся прямоугольники то по клику по мапу у меня нормально работают другие споты. Я получаю то что мне надо - иформацию по какому я кликнула (например координаты). Но как только я кликнула по джавским спотам и у меня появился прямоугольник, тогда те споты я не вижу и по клику у меня выводится - страница выводится с ошибкой-.  ну это ладно . Поскольку нужны прямоугольники. И еще:  а как отменить прямоугольник но чтобы тоже отловить это. Например по отрисовке прямоугольника я вывожу window.alert() а когда он становится невидимым то ?????? надо наверное новую джаву писать на это. 2 варианта - видимы и невидимый. Но я в джаве профан. Спасибо за инфу про обновление серверных полей. А я так долго мучилась с этим!

Добавлено через 8 минут и 8 секунд
Спасибо и жду ответов.

Добавлено через 13 минут и 13 секунд
Да на Input.text visible=false/ было. А брала из поля Value/ Но если даже засовывать инфу в asp:label то не произойдет отправка на сервер. Это понятно. А если в другой серверный элемент? Я тоже думаю что нет. И возбудить событие нельзя из джавы? я думаю что нет.  
PM MAIL   Вверх
Mymik
Дата 18.5.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(kedicik @  18.5.2007,  21:15 Найти цитируемый пост)
Ну я имею ввиду что я создала 2 спота в конструкторе а не программно как вы мне написали. То есть есть2 спота с джавой и 2 спота обычных.  Все 4 спота есть после загрузки страницы. Если я не кликаю по тем спотам где выводятся прямоугольники то по клику по мапу у меня нормально работают другие споты. Я получаю то что мне надо - иформацию по какому я кликнула (например координаты). Но как только я кликнула по джавским спотам и у меня появился прямоугольник, тогда те споты я не вижу и по клику у меня выводится - страница выводится с ошибкой-. 

Покажи как ты определила те два спота. Потому как у меня все работает. 
Цитата(kedicik @  18.5.2007,  21:15 Найти цитируемый пост)
И еще:  а как отменить прямоугольник но чтобы тоже отловить это. Например по отрисовке прямоугольника я вывожу window.alert() а когда он становится невидимым то ?????? 

Прямоугольник не становится невидимым -- он удаляется из контента страницы.
удаление прямоугольника стоит на событие onclick. 
Код

onclick="this.parentNode.removeChild(this);"

Вот этот код отвечает за удаление элемента со страницы.
Вставь перед ним что тебе нужно, или вынеси в отдельную функцию.
Цитата(kedicik @  18.5.2007,  21:15 Найти цитируемый пост)
надо наверное новую джаву писать на это. 2 варианта - видимы и невидимый. Но я в джаве профан.

красные квадраты не становятся видимыми или невидимыми. Они либо есть, либо нет. Ты можешь попросту отловить событие до создания рисунка. В функции drawRect можешь поставить свои условия и ответвления работы скрипта.
Цитата(kedicik @  18.5.2007,  21:15 Найти цитируемый пост)
Да на Input.text visible=false/ было. А брала из поля Value/ Но если даже засовывать инфу в asp:label то не произойдет отправка на сервер. Это понятно. А если в другой серверный элемент?

Вот тут вот ход твоих мыслей я слабо очень понимаю... что ты хочешь ??? Создать какие-то данные с помощью JS и отправить с PostBack на сервер ??? ну так засунь эти данные в HiddenFiled, на клиенте это (<input type="hidden" />) это тот же <input type="text" /> только невидимый и он делает PostBack на сервер. Т.е. на сервере ты можешь обратится к контенту этого поля и взять из него данные, что были вписаны туда по средствами JS.
Цитата(kedicik @  18.5.2007,  21:15 Найти цитируемый пост)
И возбудить событие нельзя из джавы? я думаю что нет. 

Почему ж нельзя, конечно можно, с помощью Page.ClientScript.GetCallbackEventReference()(в asp.net 1.1 Page.GetPostBackClientEvent())
Причем вплоть до того, что можно не использовать asp.net AJAX RC1 а через эти методы использовать ajax (сам недавно узнал об этом).


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 18.5.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Цитата(Mymik @  18.5.2007,  22:17 Найти цитируемый пост)
Покажи как ты определила те два спота. Потому как у меня все работает. 

Я поставила на них тип не NavigateUrl а забыла .......... на работе это.... postback ? и определила Target=_self. Когда кликаю по ним (но уже прямоугольник появился на других спотах) то внизу вижу ошиибку как раз что-то про Тarget. Ну тогда до понедельника если точно нужно
PM MAIL   Вверх
kedicik
Дата 21.5.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Вот посылаю Form1.aspx и Form1.aspx.vb/ Framework 2.0

Добавлено @ 18:04
Извините не знаю как правильно присоединить
Код

Partial Class Form1
    Inherits System.Web.UI.Page

    Protected Sub ImageMap1_Click(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ImageMapEventArgs) Handles ImageMap1.Click

        If (e.PostBackValue.Contains("Hot1")) Then

            LblTest.Text = "You selected 1" 

        ElseIf (e.PostBackValue.Contains("Hot2")) Then

            LblTest.Text = "You selected 2" 
        Else
            LblTest.Text = "You did not click a valid hot spot region."
        End If
    End Sub

    Sub Page_Load(ByVal sender As Object, ByVal E As System.EventArgs) Handles MyBase.Load
        If Not IsPostBack Then
            SetRect()
        Else
            Dim MyText As System.Web.UI.HtmlControls.HtmlInputHidden
            MyText = CType(Me.FindControl("Hidden1"), HtmlInputHidden)
            ViewState("Num") = MyText.Value
        End If
    End Sub
 
    Sub SetRect()
        Dim MyHot1 As New RectangleHotSpot()
        Dim MyHot2 As New RectangleHotSpot()
        MyHot1.AlternateText = "javahot1"
        MyHot1.HotSpotMode = HotSpotMode.Navigate
        MyHot1.Left = "20"
        MyHot1.Right = "50"
        MyHot1.Bottom = "80"
        MyHot1.Top = "30"
        MyHot1.NavigateUrl = "javascript:drawRect(" + "1," + MyHot1.Left.ToString() + "," + MyHot1.Top.ToString() + "," + ((MyHot1.Right - MyHot1.Left)).ToString() + "," + ((MyHot1.Bottom - MyHot1.Top)).ToString() + ",'" + ResolveUrl(ImageMap1.ImageUrl) + "')"
        ImageMap1.HotSpots.Add(MyHot1)
        MyHot2.AlternateText = "javahot2"
        MyHot2.HotSpotMode = HotSpotMode.Navigate
        MyHot2.Left = "20"
        MyHot2.Right = "50"
        MyHot2.Bottom = "250"
        MyHot2.Top = "200"
        MyHot2.NavigateUrl = "javascript:drawRect(" + "2," + MyHot2.Left.ToString() + "," + MyHot2.Top.ToString() + "," + ((MyHot2.Right - MyHot2.Left)).ToString() + "," + ((MyHot2.Bottom - MyHot2.Top)).ToString() + ",'" + ResolveUrl(ImageMap1.ImageUrl) + "')"
        ImageMap1.HotSpots.Add(MyHot2)
    End Sub
  

End Class

Добавлено @ 18:10
Код

            /* Рисуем */
        function setDiv(x,y,w,h,s,im)
        {
                /* собственно вот так вот и рисуем */
            document.body.innerHTML += '<div onclick="this.parentNode.removeChild(this);" style="position:absolute;z-index:100;'+
                'left:' + (x+10*s) + 'px;'+
                'top:' + (y+15*s) + 'px;'+
                'width:' + (w) + 'px;'+
                'height:' + (h) + 'px;'+
                'border:solid '+s+'px red;'+
                'background:url(\'' + im + '\') ' + (-x) + 'px ' + (-y) + 'px;'+
                (!(document.all) ? ';overflow:hidden' : '')+
                ';"><\/div>';
        }
        /* Вызываем функцию */
        function drawRect(Num,x, y, w, h, im)
        {
            var s = 1;/* размер бордюра */
            var lbl;
            this.setDiv(x, y, w, h, s, im);
            window.alert(Num);
            
            document.all("Text1").value=Num;
            document.all("Hidden1").value=Num;
          document.getElementById('<%=lblTest.ClientID%>').setAttribute("Text",Num);

        }


Добавлено @ 18:12
Код

    <form id="form1" runat="server">
    <div>
        <asp:ImageMap ID="ImageMap1" runat="server" AlternateText="Карта" 
            Height="288px"  ImageUrl="~/map.jpg" Width="420px">
            <asp:RectangleHotSpot  AlternateText="hot1" Bottom="109" 
                PostBackValue="Hot1" Right="336" Left="294" Top="79"  HotSpotMode="PostBack" />
            <asp:RectangleHotSpot AlternateText="Hot2" Bottom="288"  Left="307"
                PostBackValue="Hot2" Right="351"  Top="267"  HotSpotMode="PostBack" />
        </asp:ImageMap>&nbsp;<br />
        <br />
        <input id="Text1" type=text runat=server value="no" name="Text1" visible="true" />
        <input id="Hidden1" runat=server type="hidden"  /><br />
        <asp:Label ID="LblTest" runat="server" Text="Hello"></asp:Label>
    </div>
    </form>



Это сообщение отредактировал(а) Mymik - 21.5.2007, 20:53

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  code.txt 2,02 Kb
PM MAIL   Вверх
kedicik
Дата 21.5.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Все таки обновление Label не работает. После отрисовки прм-ка меняется только Hidden и InputText/ а label не меняется. 
После отрисовки прям-ка  по клику на Hot1 Hot2 выдается ошибка 
Ошибка на странице
jscript: "theForm._EVENTTARGET" есть NULL и не явл объектом
PM MAIL   Вверх
Mymik
Дата 21.5.2007, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



kedicik, твой behind-code я вообще не смотрел. Я только смотрел только то что видим в aspx файле.
1) получение ссылок на DOM объект через document.all не поддерживается браузерами кроме IE(а нам ведь нужен код, который будет работать везде). Потому ее лучше заменять на document.getElementById.

2) В 10 и 11 строчках твоего xml файла (последняя вставка в виде xml) у элементов input есть атрибут runat="server" что делает их объектами HtmlControls. А следовательно их id (как и name) на клиенте отличаются от серверного. Потому общаться к ним надо 
Код

document.getElementById('<%=Text1.ClientID %>').value = Num;
document.getElementById('<%=Hidden1.ClientID %>').value = Num;

<%=Text1.ClientID %> -- преобразуют серверный ID в клиентский.

3) asp:Label на клиенте преобразуется в конструкцию <span></span> и чтобы записать текст в эту конструкцию, тебе нужно использовать прототип innerHTML. Этот прототип возвращает и устанавливает значение контента у данного DOM объекта.
потому и изменять текст мы будем через
Код

document.getElementById('<%=lblTest.ClientID%>').innerHTML = Num;


4)После того как ты нажимала на JS кнопки, которые рисовали квадратики, я как бы переписывал весь html... и из-за этого IE почему-то не хотело делать PostBack. Потому я пошел по другому пути и переписал это полностью на DOM модели.

Ну и вобщем код страницы теперь выглядит вот так вот -->>
Код

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default4.aspx.vb" Inherits="Default4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script type="text/javascript">
            /* Рисуем */
        function setDiv(x,y,w,h,s,im)
        {
                /* собственно вот так вот и рисуем */
                div = document.createElement("DIV");
                div.onclick = function() {this.parentNode.removeChild(this)};
                div.style.position = "absolute";
                div.style.zIndex = "100";
                div.style.left = x+10*s + "px";
                div.style.top = y+15*s + "px";
                div.style.width = w + "px";
                div.style.height = h + "px";
                div.style.border = "solid " + s +"px red";
                div.style.background = "url('" + im + "') " + (-x) + "px " + (-y) + "px";
                if(!document.all) 
                    div.style.overflow = "hidden";
                document.body.appendChild(div);
        }
        /* Вызываем функцию */
        function drawRect(Num,x, y, w, h, im)
        {
            var s = 1;/* размер бордюра */
            var lbl;
            this.setDiv(x, y, w, h, s, im);
            alert(Num);
            
            document.getElementById('<%=Text1.ClientID %>').value = Num;
            document.getElementById('<%=Hidden1.ClientID %>').value = Num;
            document.getElementById('<%=lblTest.ClientID%>').innerHTML = Num;
        }        
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ImageMap ID="ImageMap1" runat="server" AlternateText="Карта" 
            Height="288px"  ImageUrl="~/map.jpg" Width="420px">
            <asp:RectangleHotSpot  AlternateText="hot1" Bottom="109" 
                PostBackValue="Hot1" Right="336" Left="294" Top="79"  HotSpotMode="PostBack" />
            <asp:RectangleHotSpot AlternateText="Hot2" Bottom="288"  Left="307"
                PostBackValue="Hot2" Right="351"  Top="267"  HotSpotMode="PostBack" />
        </asp:ImageMap>&nbsp;<br />
        <br />
        <input id="Text1" type=text runat=server name="Text1" visible="true" />
        <input id="Hidden1" runat=server type="hidden"  /><br />
        <asp:Label ID="LblTest" runat="server" Text="Hello"></asp:Label>
    </div>
    </form>
</body>
</html>

VB.NET я не сильно люблю, потому туда даже и не смотрел. Что касается работоспособности страницы -- теперь она работает во всех браузерах.

Это сообщение отредактировал(а) Mymik - 21.5.2007, 21:36


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 22.5.2007, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Ну хоть убейте меня но Label не выводит Num/ Я решила что я чего-то не понимаю ! 
А все остальное работает так как надо.  Спасибо!
PM MAIL   Вверх
Mymik
Дата 22.5.2007, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



чего это Label не работает ??? работает... он выводит значение числа Num... все правильно там... у меня работает отлично... 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 22.5.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Ну я не знаю почему. Как было у меня HELLO так и осталось. Ну может для меня это и не так важно но просто хочется понять!! и на будущее может понадобится.  У меня explorer 6/0/ Отчего же может это зависеть....
PM MAIL   Вверх
Mymik
Дата 23.5.2007, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



ты точно записываешь туда данные вот этой строкой 
Код

document.getElementById('<%=lblTest.ClientID%>').innerHTML = Num;

регистр букв соблюдала ??? (JavaScript регистрозависимый). Ковычки ставила ???
Смотри, у меня выглядит JS функция drawRect вот так вот
Код

        function drawRect(Num,x, y, w, h, im)
        {
            var s = 1;/* размер бордюра */
            var lbl;
            this.setDiv(x, y, w, h, s, im);
            alert(Num);
            
            document.getElementById('<%=Text1.ClientID %>').value = Num;
            document.getElementById('<%=Hidden1.ClientID %>').value = Num;
            document.getElementById('<%=lblTest.ClientID%>').innerHTML = Num;
        } 

Это то что я отдавал тебе. когда ты срабатывает функция alert то значение в Label остается Hello. Как только доходит работа функции до последней строчки, так в Label появляется значение Num. Все работает как по мне.
Или ты хочешь, чтобы измененное значение Label появилось на server-side ??? Label не делает PostBack данных. Так что ты не достучишься до измененного значениея Label на стороне сервера. Только лишь с помощью дополнительных элементов это можно сделать.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 23.5.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Сегодня все работает как надо. Все правильно. Я первым делом просмотрела регистр. Все соответствовало. Потом не долго мучаясь взяла и скопировала из ВАШЕГО примера . В общем все работает как часы. Какой-то глюк был. Большое спасибо за терпение и очень обстоятельные ответы. Все отлично.
PM MAIL   Вверх
kedicik
Дата 23.5.2007, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Ну спрошу еще одну вещь. Раз мы уж говорили на тему что Label не отправляет инфу серверу. На какое событие мне писать занесение результата  в БД?  На unload страницы? и брать результат из поля Hidden? У меня есть страница с radioButtonList Там я сразу при выборе одного из элементов сохраняю результат в БД. Но это серверный элемент и это возможно. А в этом случае? Как поступить?

Добавлено через 2 минуты и 53 секунды
Цитата(kedicik @ 23.5.2007,  12:16)
Так что ты не достучишься до измененного значениея Label на стороне сервера. Только лишь с помощью дополнительных элементов это можно сделать.

Какие допол элементы?
PM MAIL   Вверх
Mymik
Дата 23.5.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



kedicik, В соседней теме обсуждалось как реализовать отправку данных (вызов события) на сервер. Ты же можешь не генерировать вызов этой функции, а написать ее сама, первый ее параметр будет строчка, а второй параметр подставляй значение Num.
Либо так как мы люди продвинутые и сейчас используется AJAX, но мы конечно же не хотим подключать эти сложные библиотеки и тому подобную фигню. Мы будем использовать наш старый добрый Page.ClientScript.GetCallbackEventReference(). Который нам сгенерирует скрипт AsyncPostBack'а.
На страницы нам понадобится JS функция которая будет обрабатывать ответ с сервера
Код

    function ClientCallbackFunction(args, ctx)
    {
        document.getElementById('<%=lblTest.ClientID %>').innerHTML = args;
    }

Я особо не заморачивался и написал маленькую функцию, которая  просто вписывает значение в Label.
На странице у меня аж целых три контрола
Код

<%--- Кнопка тут сделана для отвода глаз... на самом деле она ничего не делает как видно из функции подвешеной на клиентский клик. ---%>
<asp:TextBox ID="txtTest" runat="server" /> <asp:Button ID="btnTest" OnClientClick="return!1;" runat="server" /><br/>
<asp:Label ID="lblTest" runat="server" />

А самое интересное начинается в behind-code
Во-первых для обработки AJAX'овых запросов, нам понадобится унаследоваться от интерфейса ICallbackEventHandler и реализовать два его метода RaiseCallbackEvent и GetCallbackResult
Метод RaiseCallbackEvent вызывается при поподании запроса на сервер. Т.е. тут ты как раз и видишь те аргументы что пришли к тебе.
Метод GetCallbackResult отвечает за отдачу строчки обратно пользователю.
Т.е. как я представляю это себе -- первый метод для работы, второй метод для оповещения пользователя, что все супер. smile 

И так. в Behind-code у меня вот такой вот код
Код

public partial class Default3 : System.Web.UI.Page, ICallbackEventHandler
{
    /* просто временное хранилище */
    public string args;
    protected void Page_Load(object sender, EventArgs e)
    {
        /* Не зарегестрирован-ли уже клиентский скрипт :о)  */
        if (!Page.ClientScript.IsClientScriptBlockRegistered("asyncScript"))
        {
            /* Генерация скрипта для работы AJAX запросов. если последний аргумент false то это будет обычный PostBack */
            string asyncScript = Page.ClientScript.GetCallbackEventReference(this, "args", "ClientCallbackFunction", "ctx", true);
            /* это обертка в функцию для более удобного пользования */
            System.Text.StringBuilder script = new System.Text.StringBuilder();
            script.Append("function DoCallBack(args, ctx){");
            script.Append(asyncScript);
            script.Append("}");
            /* Регистрация скрипта */
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "asyncScript", script.ToString(), true);
        }
        /* 
            Подключение обертки на событие изменения данных в TextBox (замечу, 
            что это событие сработает только лишь после того как форма потеряет 
            фокус, а не по во время изменения данных в форме) 
        */
        txtTest.Attributes.Add("onchange", "DoCallBack(this.value, 0)");

    }
    /* Два метода из интерфейса */
    public void RaiseCallbackEvent(string eventArgument)
    {
        /* Вот тут вот ты можешь спокойно записывать нужные тебе данные в СУБД и возвращать все что тебе хочется */
        args = eventArgument;
    }
    public string GetCallbackResult()
    {
        /* А тут ты уже отдаешь результат пользователю */
        return args;
    }
}

Вот собственно говоря и все. Это такой маленький экскурс в AJAX который тебе пригодится в поиске твоего решения. Для больший проектов такая генерация AJAX очень сложна и лучше подключать сборку asp.net ajax rc1. А для одиночного запроса подойдет и такое дело.

Если же не хочешь использовать AJAX.
То тебе всегда на помощь спешат HiddenFields, в которые ты сможешь записать данные из Label и они уже отпостят эти изменения на сервер. Вот так вот все просто... только тогда пользователя обязательно надо будет отправить на сервер...

Это сообщение отредактировал(а) Mymik - 23.5.2007, 19:28


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 24.5.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Огромное спасибо! Все замечательно. А я так долго мучилась с этим. MyMik спасибо за обстоятельные ответы
PM MAIL   Вверх
kedicik
Дата 25.5.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Сори.... это опять я. Соединила все наши изыскания вместе. 
По клику по хотспоту рисую прямоугольник и загоняю Num в TextBox  txtText (все делаю как ранее). 
На onChange Textbox стоит занесение текта в  Label  txtText.Attributes.Add("onchange", "DoCallBack(this.value, 0)")
 Если меняю текст в Textbox и перехожу на кнопку или щелкаю по форме (теряю фокус),  то как и было ранее меняется Label. Но это работает когда вживую меняешь текст. Если же кликаешь по хотспоту то Label не меняется то есть onchange не возникает. Может 
            txtText.Attributes.Add("onchange", "DoCallBack(this.value, 0)")
поменять на что-то другое? Я думала по клику на спот загнать Num в txtText, и потом по  изменению в txtText сохранить инф в БД. Получается я должна сделать :
найти контрол Myhot1 (поскольку он динамический) и после этого
Myhot1.Attributes.Add("onclick", "DoCallBack(this.value, 0)")
Так ?
PM MAIL   Вверх
Mymik
Дата 25.5.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



kedicik, после того как ты записала данные в TextBox просто искусственно возбуди событие onchange().
Код

myTextBox = document.getElementById('<%=textBoxId.ClientID %>');
myTextBox.value = Num;
myTextBox.onchange();


P.S. настоятельно рекомендую начать ознакамливаться с DHTML или DOM level 0. ну и потихоньку до третьего уровня добраться.
обращаться сюда это нормально и мы всегда рады тебе помочь, но слишком сильно тормозит производство окончательного продукта в виде сайта.



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
kedicik
Дата 28.5.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 12.4.2007

Репутация: нет
Всего: нет



Mymik, большое спасибо за все! Все получилось!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0792 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.