반응형

일반적으로 올리는 UWP 소스는 C#, XAML 을 기준으로 합니다.

 

잘못된 부분이 있거나 궁금하신게 있으면 댓글 달아주세요

 

 

UWP 사용 시 입력한 인터넷 주소에 접속하여 기본적인 페이지의 기능을 모두 사용할수있고

주소창 입력이 가능하여 다른 페이지로의 이동이 가능한 기능인 웹뷰를 사용할수있는 예제

 

 

웹 뷰창을 닫을 수 있고 입력한 주소로 이동이 가능하게 버튼을 추가해봄

자세한 사항은 아래 첨부된 코드를 확인해주세여

 

 

 

CS 코드

 

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

using Windows.UI.Xaml.Media; //UI 이동

// 빈 페이지 항목 템플릿에 대한 설명은 https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x412에 나와 있습니다.

namespace testing
{
    /// <summary>
    /// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
    /// </summary>
    public sealed partial class MainPage : Page
    {

        //웹 뷰 on/off 확인 변수
        int Web_View_switch = 0;


        public MainPage()
        {
            this.InitializeComponent();
            
        }

        // 웹뷰 인터넷 사용 클릭 = 브라우저 팝업 창 뜸
        async private void Web_view_Click(object sender, RoutedEventArgs e)
        {
            if (Web_View_switch == 0)
            {
                Web_View_switch = 1;
                Web_view.Visibility = Visibility.Visible;
                
            }
            //웹뷰 닫기
            else
            {
                Web_view.Visibility = Visibility.Collapsed;

                //tbxURL.Text = "";
                String sURL = "http://www.naver.com/";
                Uri webURL = new Uri(sURL);
                ctlBrowser.Navigate(webURL);

                Web_View_switch = 0;
            }
        }


        // 웹뷰 주소창 이동
        private void Web_Start_Click(object sender, RoutedEventArgs e)
        {
            String sURL = tbxURL.Text;
            if (sURL.IndexOf("http://") == -1) { sURL = "http://" + sURL; }

            try
            {
                Uri webURL = new Uri(sURL);
                ctlBrowser.Navigate(webURL);
            }
            catch (Exception)
            {
                // throw;
            }
        }

        // 웹뷰 주소창
        private void CtlBrowser_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
        {
            ctlProgress.IsActive = true;
        }

        private void CtlBrowser_NavigationCompleted(WebView sender, WebViewNavigationCompletedEventArgs args)
        {
            ctlProgress.IsActive = false;
        }
        
        //웹뷰 인터넷 닫기
        private void Web_C_Click(object sender, RoutedEventArgs e)
        {
            Web_view.Visibility = Visibility.Collapsed;

            //tbxURL.Text = "";
            String sURL = "http://www.naver.com/";
            Uri webURL = new Uri(sURL);
            ctlBrowser.Navigate(webURL);
            

            Web_View_switch = 0;           
        }
        
    }
}

 

 

 

XAML 코드

<Page
    x:Class="testing.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:testing"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <Button x:Name="webView" Click="Web_view_Click">웹뷰 열기</Button>
        <TextBlock Width="1" Height="1" VerticalAlignment="Top" HorizontalAlignment="Right" x:Name="textBlock" ></TextBlock>

        <!--웹뷰-->        
        <StackPanel x:Name="Web_view" Canvas.ZIndex="6">
            <StackPanel x:Name="Web_menu" Height="50" Grid.Row="0" Orientation="Horizontal"  HorizontalAlignment="Stretch"  VerticalAlignment="Stretch" Background="Gainsboro" >
                <!--<Grid x:Name="Web_menu">-->
                <Image Source="Assets/5url.png" Width="60" Height="50" Stretch="Uniform" />

                <TextBox  x:Name="tbxURL" Text="http://"  Width="500" Background="White" BorderBrush="#8d8d8d" BorderThickness="1" Padding="5" ToolTipService.ToolTip="URL 작성" />
                <Button x:Name="Web_Start" ToolTipService.ToolTip="입력 URL로 이동" Height="auto" Click="Web_Start_Click">                    
                    <SymbolIcon Symbol="Forward"/>
                </Button>                
                <Button x:Name="Web_C" Click="Web_C_Click" ToolTipService.ToolTip="웹 종료">                    
                    <SymbolIcon Symbol="Cancel"/>
                </Button>
                <ProgressRing x:Name="ctlProgress" Height="30" Width="30" />
                <!--</Grid>-->
            </StackPanel>
            <WebView x:Name="ctlBrowser" NavigationStarting="CtlBrowser_NavigationStarting" NavigationCompleted="CtlBrowser_NavigationCompleted" Source="http://www.naver.com/" Height="1026" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
        </StackPanel>

    </Grid>
</Page>

 

XAML 에는 버튼에 아이콘을 삽입해보았다

생각보다 간단하게 UWP 기본 제공 심플 아이콘을 입힐수 있으니 모두들 사용해보자

 

 

아래는 사용 예제 이미지 첨부

->  클릭 시 입력한 주소로 웹페이지 이동

X 클릭 시 웹뷰 화면 닫기 가능

웹뷰 닫은 뒤 열기 클릭 시 웹뷰 화면 다시 불러와짐

 

반응형
반응형

일반적으로 올리는 UWP 소스는 C#, XAML 을 기준으로 합니다.

 

잘못된 부분이 있거나 궁금하신게 있으면 댓글 달아주세요

 

기존 올린 예제에 불러온 동영상 파일의 위치 이동 및 크기 조절이 가능한 기능을 덧붙인 예제입니다.

이때, 크기조절은 터치가 가능한 터치 모니터, 스크린에서만 가능합니다

 

 

CS

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

using Windows.UI.Xaml.Media; //UI 이동

// 빈 페이지 항목 템플릿에 대한 설명은 https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x412에 나와 있습니다.

namespace testing
{
    /// <summary>
    /// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        //동영상 on,off 변수
        int Mov_open_switch = 0;

        //동영상 이동
        private TranslateTransform dragTranslation_M;

        

        public MainPage()
        {
            this.InitializeComponent();

            //동영상 이동
            dragTranslation_M = new TranslateTransform();
            MediaPlayerPopup.ManipulationDelta += MediaPlayerPopup_ManipulationDelta;
            MediaPlayerPopup.RenderTransform = this.dragTranslation_M;

            //동영상 트랙바
            MOV.AreTransportControlsEnabled = false;

        }


        private async void Media_open_Click(object sender, RoutedEventArgs e)
        {
            if (Mov_open_switch == 0)
            {
                var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

                openPicker.FileTypeFilter.Add(".wmv");
                openPicker.FileTypeFilter.Add(".mp4");
                openPicker.FileTypeFilter.Add(".wma");
                openPicker.FileTypeFilter.Add(".mp3");
                openPicker.FileTypeFilter.Add(".avi");


                var file = await openPicker.PickSingleFileAsync();

                // mediaPlayer is M_right MediaElement defined in XAML
                if (file != null)
                {
                    if (!MediaPlayerPopup.IsOpen) { MediaPlayerPopup.IsOpen = true; }
                    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                    MOV.SetSource(stream, file.ContentType);
                    MOV.AreTransportControlsEnabled = true;
                    MOV.TransportControls.IsZoomButtonVisible = true;
                    MOV.TransportControls.IsZoomEnabled = true;

                    MOV_C.Visibility = Visibility.Visible;
                    Mov_open_switch = 1;
                    MOV.Play();
                }
                else
                {
                    this.textBlock.Text = "Operation cancelled.";
                    Mov_open_switch = 0;
                    return;

                }

            }
            //동영상 닫기
            else
            {
                Mov_open_switch = 0;
                if (MediaPlayerPopup.IsOpen) { MediaPlayerPopup.IsOpen = false; }
                dragTranslation_M.X = 0;
                dragTranslation_M.Y = 0;
            }
        }

        // 동영상 닫기
        private void MOV_C_Click(object sender, RoutedEventArgs e)
        {
            if (MediaPlayerPopup.IsOpen) { MediaPlayerPopup.IsOpen = false; }
            Mov_open_switch = 0;
            dragTranslation_M.X = 0;
            dragTranslation_M.Y = 0;
        }
        
        private void OnMEFullWindowChanged(DependencyObject sender, DependencyProperty dp)
        {
            MediaElement me = (MediaElement)sender;

            if (me != null && dp == MediaElement.IsFullWindowProperty)
            {
                if (me.IsFullWindow == true)
                {
                    MediaPlayerPopup.Visibility = Visibility.Collapsed;
                }
                else
                {
                    MediaPlayerPopup.Visibility = Visibility.Visible;
                }
            }
        }


        

        //동영상 크기조절
        private void MOV_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            MediaPlayerPopup.Width = Window.Current.Bounds.Width;
            MediaPlayerPopup.Height = Window.Current.Bounds.Height;
        }

        private void MediaPlayerPopup_ManipulationDelta(object sender, Windows.UI.Xaml.Input.ManipulationDeltaRoutedEventArgs e)
        {
            dragTranslation_M.X += e.Delta.Translation.X;
            dragTranslation_M.Y += e.Delta.Translation.Y;
            //동영상 크기조절
            ScaleTransformm.ScaleX *= e.Delta.Scale;
            ScaleTransformm.ScaleY *= e.Delta.Scale;
        }
    }
}

 

 

XAML

<Page
    x:Class="testing.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:testing"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <Button x:Name="openMedia" Click="Media_open_Click">동영상 불러오기</Button>
        <TextBlock Width="1" Height="1" VerticalAlignment="Top" HorizontalAlignment="Right" x:Name="textBlock" ></TextBlock>
        <!--동영상-->
        <Popup x:Name="MediaPlayerPopup" VerticalAlignment="Top" HorizontalAlignment="Left" Canvas.ZIndex="5"  Width="720" Height="405"  ManipulationMode="All" >
            <!--VerticalAlignment="Bottom" HorizontalAlignment="Center"-->
            <Grid >
                <Grid ManipulationDelta="MediaPlayerPopup_ManipulationDelta" ManipulationMode="Scale">
                    <MediaElement x:Name="MOV" SizeChanged="MOV_SizeChanged" AreTransportControlsEnabled="True" Height="405" Width="720" ManipulationMode="All" >                        
                        <MediaElement.RenderTransform>
                            <ScaleTransform x:Name="ScaleTransformm" ScaleX="1.0" ScaleY="1.0"/>
                        </MediaElement.RenderTransform>
                    </MediaElement>
                </Grid>
                <!--동영상 닫기-->
                <Button x:Name="MOV_C" Background="White" Click="MOV_C_Click" VerticalAlignment="Top" HorizontalAlignment="Left" >
                    <SymbolIcon Symbol="Cancel"/>
                </Button>
            </Grid>
        </Popup>
    </Grid>
</Page>

 

ScaleX, ScaleY의 값에 1.0, 1.5 등을 넣음으로써 크기 조절 시 가로, 세로 증감하는 길이에 대한 비율을 정할 수 있다

 

 

 

위의 코드 실행 이미지

 

 

동영상을 가운데로 이동 후 작게 줄여봄

 

 

 

참고 사이트

 

docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.media.scaletransform?view=winrt-19041

 

ScaleTransform Class (Windows.UI.Xaml.Media) - Windows UWP applications

Scales an object in the two-dimensional x-y coordinate system.

docs.microsoft.com

 

반응형
반응형

일반적으로 올리는 UWP 소스는 C#, XAML 을 기준으로 합니다.

 

잘못된 부분이 있거나 궁금하신게 있으면 댓글 달아주세요

 

 

MediaPlayerElement 클래스 사용한 동영상 파일 (음성 파일 포함) 불러오기 예제 코드에 이거저거 덧붙여봄

 

기본적인 기능으로는 내 PC에 있는 동영상 파일을 불러올 수 있습니다

 

예제 코드에 추가한 내용으로는 트랙바 추가, 동영상 오픈 시 자동 재생, 동영상 닫기 버튼입니다

 

MainPage.xaml.cs

 

using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace testing
{
    /// <summary>
    /// 자체적으로 사용하거나 프레임 내에서 탐색할 수 있는 빈 페이지입니다.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        //동영상 on,off 변수
        int Mov_open_switch = 0;

        public MainPage()
        {
            this.InitializeComponent();
        }


        private async void Media_open_Click(object sender, RoutedEventArgs e)
        {
            if (Mov_open_switch == 0)
            {
            	
                var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

                openPicker.FileTypeFilter.Add(".wmv");
                openPicker.FileTypeFilter.Add(".mp4");
                openPicker.FileTypeFilter.Add(".wma");
                openPicker.FileTypeFilter.Add(".mp3");
                openPicker.FileTypeFilter.Add(".avi");


                var file = await openPicker.PickSingleFileAsync();

                // mediaPlayer is M_right MediaElement defined in XAML
                if (file != null)
                {
                    if (!MediaPlayerPopup.IsOpen) { MediaPlayerPopup.IsOpen = true; }
                    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
                    MOV.SetSource(stream, file.ContentType);
                    MOV.AreTransportControlsEnabled = true;
                    MOV.TransportControls.IsZoomButtonVisible = true;
                    MOV.TransportControls.IsZoomEnabled = true;

                    MOV_C.Visibility = Visibility.Visible;
                    Mov_open_switch = 1;
                    MOV.Play();
                }
                else
                {
                	//파일 불러오기 실패한 경우
                    this.textBlock.Text = "Operation cancelled.";
                    Mov_open_switch = 0;
                    return;
                }

            }
            //동영상 닫기 - 동영상 불러오기 한번 더 클릭 시 닫기
            else
            {
                Mov_open_switch = 0;
                if (MediaPlayerPopup.IsOpen) { MediaPlayerPopup.IsOpen = false; }
            }
        }


        // 동영상 닫기
        private void MOV_C_Click(object sender, RoutedEventArgs e)
        {
            if (MediaPlayerPopup.IsOpen) { MediaPlayerPopup.IsOpen = false; }
            Mov_open_switch = 0;
        }

    }
}

 

MainPage.xaml

<Page
    x:Class="testing.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:testing"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <Button x:Name="openMedia" Click="Media_open_Click">동영상 불러오기</Button>
        <TextBlock Width="1" Height="1" VerticalAlignment="Top" HorizontalAlignment="Right" x:Name="textBlock" ></TextBlock>
        <!--동영상-->
        <Popup x:Name="MediaPlayerPopup" VerticalAlignment="Top" HorizontalAlignment="Left" Canvas.ZIndex="5"  Width="720" Height="405">            
            <Grid >                
                <MediaElement x:Name="MOV" AreTransportControlsEnabled="True" Height="405" Width="720" >                    
                </MediaElement>                
                <!--동영상 닫기-->
                <Button x:Name="MOV_C" Background="White" Click="MOV_C_Click" VerticalAlignment="Top" HorizontalAlignment="Left" >
                    <SymbolIcon Symbol="Cancel"/>
                </Button>
            </Grid>
        </Popup>
    </Grid>
</Page>

 

실행 화면

 

 

 

 

 

 

참고 사이트

 

https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaplayerelement?view=winrt-19041

 

MediaPlayerElement Class (Windows.UI.Xaml.Controls) - Windows UWP applications

Represents an object that uses a MediaPlayer to render audio and video to the display.

docs.microsoft.com

 

반응형
반응형

나중에 블로그에서 검색해보려고 여태 사용한 방식들 정리중으로

설명이 단조로우니 미리 주의바람

 

 

제이쿼리 사용함

js로도 사용이 가능하지만 DOM 접근하여 사용한 jquery 방식이 한결 간결하길래 이 방식으로 사용했다

 

심플하게 키보드 입력받는것만 올려본다

 

 

$(document).ready(function(){
       $("#test").keypress(function (e) {
        if (e.which == 13){
                   send();  // 실행할 이벤트 호출
        }
    });
});
<input type="text" name="" id="test" class="inp_st3" placeholder="메시지를 입력해주세요" />

#test -> id가 test인 input에 접근하여 keypress 시 특정 함수 호출되게끔 함

키보드 enter 클릭 시 전송 버튼을 클릭하지 않아도 입력한 내용이 자동으로 전달되게끔

 

 

아래 스택오버플로우에서는 keydown, keypress의 차이에 대해 자세한 설명이 있으니

시간날때 정독

 

stackoverflow.com/questions/1367700/whats-the-difference-between-keydown-and-keypress-in-net

 

What's the difference between KeyDown and KeyPress in .NET?

What is the difference between the KeyDown and KeyPress events in .net?

stackoverflow.com

www.javascripttutorial.net/javascript-dom/javascript-keyboard-events/

 

JavaScript Keyboard Events Explained

In this tutorial, you will learn how to work with JavaScript keyboard events including the keydown, keypress, and keyup events.

www.javascripttutorial.net

마찬가지로 자바스크립트에서 사용하는 키보드 이벤트 관련 내용 설명

반응형
반응형

구현 시 특정 버튼을 클릭할 때 동시에 다른 버튼이 함께 눌리는 효과를 찾아보다 사용한 방법

 

 

스택오버플로우 참고

stackoverflow.com/questions/5811122/how-to-trigger-a-click-on-a-link-using-jquery

 

stackoverflow.com/questions/2381572/how-can-i-trigger-a-javascript-event-click

 

How can I trigger a JavaScript event click

I have a hyperlink in my page. I am trying to automate a number of clicks on the hyperlink for testing purposes. Is there any way you can simulate 50 clicks on the hyperlink using JavaScript? <...

stackoverflow.com

자바스크립트 DOM 접근하여 사용

var link = document.getElementById('my-link');
for(var i = 0; i < 50; i++)
   link.click();

 

 

 

stackoverflow에서 찾은 방법을 살짝 변경하여 내가 사용한 방법

function OpenClick()
{
  console.log('오픈 클릭');
  $("#digit_search").trigger('click');

  var filename = document.getElementById("digit_search").value;
  console.log(filename + '클릭한 파일명');
 	
}

 

예전에 웹을 처음 맞닥뜨렸을때 제이쿼리 문법이 너무 괴상해서 쳐다도 안봤는데

확실히 간결해서 익숙해지고 나서는 제이쿼리를 좀더 사용한다

클릭을 유도하는 방법이라 버튼에 대한 click trigger를 유발시켜서 사용

 

 

반응형
반응형

소스트리를 익힐겸 이거저거 푸쉬를 해보면서

잘못 올린 파일이 있길래 이참에 저장소 삭제도 해볼겸 리포지토리 삭제를 해보았다

 

삭제할 리포지토리에 들어가서 Setting 탭 클릭

 

하단으로 스크롤을 내려 Delete this repository 클릭

저장소를 삭제하게 됐을 시 되돌릴수없다는 경고문이 뜨며

굵은 글씨로 쓰여진것을 빈칸에 그대로 복붙해주면 저장소 제거 버튼이 활성화된다

 

 

마지막으로 비밀번호 확인 단계가 필요하다

이 과정을 거치면 저장소는 깔끔하게 삭제가 된다

 

반응형
반응형

깃허브를 다룰 때 커맨드 라인에서 명령어를 입력하면서 블로그를 만들어보다 그만두었는데

GUI로 git을 다룰수 있는 프로그램을 알게되어 프로그램 설치하며 방법을 기록해본다

 

vincent driessen의 branching 모델인 git-flow 도 익혀가며

앞으로의 코드 관리는 소스트리를 이용해서 git에 업로드 해봐야겠다 

git-flow, 10년이 지난 2020년에 올라온 새글 nvie.com/posts/a-successful-git-branching-model/

 

 

 

 

홈페이지에 언급되어있듯이 맥, 윈도우에서 사용이 가능한 깃 클라이언트이다

호주 atlassian 사에서 개발되었다고 함

 

이 회사는 bitbucket 이라는 github 리포지토리를 관리할수있는 프로그램을 개발 배포를 한다고 한다

협업을 하는 소프트웨어회사에서 요구되는 바를 잘 알고 개발하는듯

 

 

설치 과정은 다음 사진들을 참고하면 되겠다

 

아이디가 없는 경우는 Create one for free 클릭

아이디가 있다면 바로 bitbucket 클릭

 

 

 

계정 만들 때 구글로 연동이 되길래

구글로 계속하기 클릭해서 했다

 

 

계정 만들기 클릭

 

다음

 

 

Create repository 클릭 후 다음

 

나는 git을 예전에 설치해둔 적이 없기 때문에

이렇게 뜨는데

깃 자체를 설치한적이 없는 사람들은

Git 옆에 체크박스에 체크를 하고 다음을 클릭해야한다

 

밑에 있는 Mercurial은 atlatlassian사에서 개발한 github 같은 거라고 함

차이점은 추후 좀더 찾아보고 알아만 둬야겠다

 

따라서 git을 이용하시려면 굳이 설치 안해줘도될듯

패스 후 다음 클릭

 

 

 

이렇게 설치가 완료되면

다음 창이 열리며 소스트리 설치가 끝이난다

 

 

 

 

 

 

반응형

+ Recent posts