반응형

* 안드로이드 설치

 

다운로드 사이트

https://developer.android.com/studio

자바 JDK 다운로드

https://www.oracle.com/technetwork/java/javase/downloads/index.html

 

자바 환경 변수 등록

제어판 -> 시스템 -> 왼쪽 메뉴에서 고급 시스템 설정 (7)

 

 

 

위 그림 처럼 ~에 대한 사용자 변수 에서 Path 클릭 편집을 누른 후

 

JDK 가 설치된 폴더를 위 그림과 같이 입력 한 후 확인을 눌러 줍니다.

다음 시스템 변수 에서 새로 만들기 클릭 후

 

 

Path에서 했던 것 처럼 JDK 가 설치된 폴더를 변수 값에 변수 이름은 JAVA_HOME

으로 만들어 줍니다.

마지막으로 윈도우 시작 -> 실행 -> cmd

 

 

다음으로 안드로이드 Install 파일을 클릭 하여 설치를 진행 합니다.

 

 

만약 안드로이드 SDK 가 설치가 되어 있다면 목록에서 나타나지 않지만 걱정 없이

설치를 진행 합니다.

 

 

위와 같이 기본 설치 폴더대로 NEXT 버튼을 클릭 합니다. 하지만 안드로이드 SDK

설치 위치에 한글 폴더가 포함 되어 있으면 Browse 버튼을 눌러 영문 폴더만 있는

곳으로 설치를 진행 합니다.

* 한글 폴더가 포함 되어 있으면 안됨.

 

 

사용자 지정으로도 설치를 진행 할 수 있지만 처음이기 때문에 Standard 로 진행 합니다.

 

 

안드로이드 개발 프로젝트 UI 화면은 둘 중 선택 할 수 있으며, 나중에 또한 바꿀

수 있기 때문에 아무거나 선택 합니다.

 

Next 버튼을 클릭 하여 마무리를 해 줍니다.

 

 

 

반응형
반응형

* VBNET 프로그램 중복 실행 방지 예제

 

1. Visual Studio 를 켜고 메뉴에서 파일 -> 새로 만들기 -> Project 를 선택

    VBNET Windows Forms 응용 프로그램 열어 줍니다. =>

    Visual Studio 2019 는 Windows Forms 응용 프로그램(NET.Framework) 를 선택 (NET.Core) X

 

오른쪽 상단 솔루션 탐색기 -> My Project 클릭 -> 중앙 화면에 으용 프로그램 이벤트 보기를 클릭을 합니다.

 

그럼 아래의 그럼과 같이 솔루션 탐색기에 ApplicationEvents.vb 파일이 생기게 됩니다.

 

ApplicationEvents.vb

 

Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
  '프로그램 중복 실행 방지...
  If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
            MessageBox.Show("프로그램이 이미 실행 중입니다...종료 후 다시 실행해 주세요.", _
            "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
       End
  End If
End Sub

또는 Form1.vb 안에서도 구현 가능 합니다.

 

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '프로그램 중복 실행 방지...
        If UBound(Diagnostics.Process.GetProcessesByName(Diagnostics.Process.GetCurrentProcess.ProcessName)) > 0 Then
            MessageBox.Show("프로그램이 이미 실행 중입니다...종료 후 다시 실행해 주세요.", _
                            "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
            End
            'Application.Exit()
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show("프로그램 중복 실행 테스트...", "확 인", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
    End Sub

    
End Class

 

C# 처럼 Application.Exit() 를 써서 응용프로그램을 종료 시켜도 되지만 VB6 처럼 간단한  End 로도 프로그램

을 종료 하실 수 있습니다.

 

* 예제 결과

 

결과 화면

 

[C#] 프로그램 중복 실행 방지

 

[C#] 프로그램 중복 실행 방지

* 프로그램 중복 실행 방지 예제 1. Visual Studio 를 켜고 메뉴에서 파일 -> 새로 만들기 -> Project 를 선택 C# Windows Forms 응용 프로그램 열어 줍니다. 2. 아래의 그림과 같이 오른쪽 솔루션 탐색기에서 Pro..

kdsoft-zeros.tistory.com

 

반응형
반응형

* 안드로이드 휴대폰에 직접 테스트 시 Run 을 하고 난 뒤 다시 Run 할 때 발생 하는 오류

 

 -> 해결 방법 -> 안드로이드 스튜디오 File -> Settings ->

     왼쪽 트리뷰에 Build, Execution, Deployment 메뉴 클릭 ->Instant Run 클릭 후 ->

     오른쪽 화면에 표시되는 곳 에서 Enable Instant Run to hot swap code/resource changes on deploy

     체크 되어 있는 것을 해제 후 Apply 버튼 클릭

반응형
반응형

* 프로그램 중복 실행 방지 예제

 

1. Visual Studio 를 켜고 메뉴에서 파일 -> 새로 만들기 -> Project 를 선택

   C# Windows Forms 응용 프로그램 열어 줍니다.

 

2. 아래의 그림과 같이 오른쪽 솔루션 탐색기에서 Program.cs 파일을 더블 클릭 하여 소스를 열어 줍니다.

3. Program.cs 파일 Main() 함수 안에 중복 코드 구현

 

            //이미 프로그램이 실행 중 일때...
            System.Diagnostics.Process[] processes = null;
            string strCurrentProcess = System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper();
            processes = System.Diagnostics.Process.GetProcessesByName(strCurrentProcess);
            if (processes.Length > 1)
            {
                MessageBox.Show(string.Format("'{0}' 프로그램이 이미 실행 중입니다.", System.Diagnostics.Process.GetCurrentProcess().ProcessName));
                return;
            }

또는 Form1.cs 안에서 구현 가능 합니다.

 

            //이미 프로그램이 실행 중 일때...
            System.Diagnostics.Process[] processes = null;
            string strCurrentProcess = System.Diagnostics.Process.GetCurrentProcess().ProcessName.ToUpper();
            processes = System.Diagnostics.Process.GetProcessesByName(strCurrentProcess);
            if (processes.Length > 1)
            {
                MessageBox.Show(string.Format("'{0}' 프로그램이 이미 실행 중입니다.", System.Diagnostics.Process.GetCurrentProcess().ProcessName));
                Application.Exit();
            }

다만 둘 차이가 Program.cs 안에서는 return 으로 끝나지만 Form1.cs 안에서는 Application.Exit() 로 끝난다는 점 입니다.

Program.cs 안에서는 보시는 바와 같이 메인 함수 안에서 아직 어플리케이션이 시작 전에 있기 때문에 그렇고

Form1.cs 안에서는 이미 어플리케이션이 실행 되었기 때문에 그렇습니다.

 

4. EXE 파일이 빌드된 폴더로 이동 하여 EXE 파일을 마구 클릭 해 봅니다.

아래는 제가 예제로 만든 예제 위치 이며 각기 다를 수 있습니다.

-> C:\바탕화면\CSharp_ProgramOverlap\CSharp_ProgramOverlap\bin\Debug

반응형
반응형

 

hangulkeyboard.apk
0.06MB

* 아래와 같이 실행 하기전 에뮬레이터는 이미 켜져 있는 상태에서 실행 하여야 됨.

 

1. C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools

환경 변수 등록.

-> 내컴퓨터 속성 -> 고급 시스템 설정 -> 고급 탭 클릭 -> 환경 변수 버튼 클릭

-> 시스템 변수 path 를 찾아 클릭 후 편집 버튼 위 Android SDK 폴더 경로를

맨 마지막에 추가 해준다. 확인 버튼

 

2. 환경 변수 등록을 마쳤으면 첨부 파일 다운 후 cmd 또는 보조프로그램에 명령프롬

프트 클릭 첨부된 파일 다운 받은 경로로 이동 ex) 바탕 화면에 다운을 받아 놨다면

아래의 경로가 됨.
-> C:\Users\Administrator\Desktop>adb install hangulkeyboard.apk 를 눌러 엔터

설치가 되고 Sucess 가 나오면 준비 완료

 

3. 안드로이드 에뮬레이터 에서 설정

-> 언어 및 키보드 설정에서 키보드 us 로 되어 있는 것을 한글 키보드로 바꿔 주면 됨.

 

반응형
반응형

* 어플 아이콘 변경 방법

 

안드로이드를 설치 하고 프로젝트를 작성 했다면

C:\Users\Administrator\AndroidStudioProjects\VisualProgramming\app\src\main\res

위의 경로에 보통 만들어 짐. 위 폴더에 들어 가게 되면

 

위와 같이 나오게 됨. 여기서 hdpi mdpi xhdpi ~ 가 있는데 이건 각 이미지 크기를 말하며 이미지를 거기에 맞게 픽셀을 맞춰 넣게 되면 됩니다.

 

mdpi

48px*48px

 

hdpi

72px*72px

 

xhdpi

96px*96px

 

xxhdpi

144px*144px

 

xxxhdpi

192px*192px

 

이미지를 다 맞게 넣었다면 마지막으로 아래와 같이 변경 해 줍니다.

* AndroidMenifest.xml - 아이콘 변경

 

<application
    android:allowBackup="true"
    android:icon="@mipmap/mainicon1"     <- 아이콘 변경 부분
    android:label="@string/app_name"     
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MediumActivity"></activity>
</application

 

반응형
반응형

* VBNET Delay 함수 예제...

 

메인화면

Form1.vb

 

 

Public Class Form1
    '지연 시간 젤 변수...
    Dim dtDelayStart As DateTime

    Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
        '지연
        dtDelayStart = DateTime.Now

        '지연 함수 사용
        '5초간 지연
        'Call DelaySystem(5000) <- VB6 처럼 함수 Call 키워드를 써서도 가능
        DelaySystem(5000)

        '지연 시간 구하기
        Dim ts As TimeSpan = DateTime.Now - dtDelayStart
        lblTime.Text = ts.Seconds.ToString()

    End Sub

    Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
        '지연 중 버튼 클릭 할 
        lbl.Text = "지연 시간 중 버튼 Click..."
    End Sub

    Private Sub DelaySystem(ByVal ms As Integer)
        'DelaySystem
        '1000ms = 1초
        '전달인자 : 얼마나 지연 시킬 것인가에 대한 변수
        Dim dtAfter As DateTime = DateTime.Now
        Dim dtDuration As TimeSpan = New TimeSpan(0, 0, 0, 0, ms)
        Dim dtThis As DateTime = dtAfter.Add(dtDuration)

        While (dtThis >= dtAfter)
            'DoEvents() 를 사용 해서 지연 시간 동안
            '버튼 클릭 이벤트 및 다른 윈도우 이벤트를 받을 수 있게끔 하는 역할
            '없으면 지연 동안 다른 이벤트를 받지 못함...
            '
            System.Windows.Forms.Application.DoEvents()
            '현재 시간 얻어 오기...
            'VBNET 은 VB6 처럼 Date.Now 로 해도 됨.
            dtAfter = DateTime.Now

        End While

        'VB6 처럼 아래의 소스 처럼 Date 클래스 사용으로도 표현 가능
        'Dim dtAf As Date = Date.Now
        'Dim dtDrua As TimeSpan = New TimeSpan(0, 0, 0, 0, ms)
        'Dim dtTh As Date = dtAf.Add(dtDuration)

        'While (dtTh >= dtTh)
        'System.Windows.Forms.Application.DoEvents()
        'dtAf = Date.Now
        'End While

    End Sub

End Class

 

위 소스 예제를 보면 DelaySystem 함수 안 While 문 에 Application.DoEvents() 함수가 있습니다.

DoEvents() 함수 가 있고 없고 차이는 예제를 따라 하면서 주석 처리를 하시면 확연한 결과를 보실 수 있습니다.

 

주석에서 설명 드렸듯 윈도우의 다른 이벤트를 받을 수 있고 없고 인데 딜레이 함수 만드는 이유는

타이밍을 늦게 잡기 위해 딜레이 함수 밑에 코드 구현 구문을 조금 지연 시킨 뒤 실행 하고 싶으실 때

그럼 System.Threading.Thread.Sleep() 으로 하면 되지 않나 싶지만 이 또한 딜레이 함수에 DoEvents() 가 없는

결과와 같습니다.

 

하지만 DoEvents() 함수의 남발한 사용 및 사용 위치에 따라 상상하지 못한 결과를 얻으실 수도 있습니다.

 

* 예제 결과

 

진행 중 화면

 

말씀 드렸듯 지연함수는 그대로 돌고 있으며 다른 버튼을 클릭 했을 때의 이미지 입니다. DoEvents() 가 없이 저 버튼을

클릭 하였다면 5초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.

 

결과 화면

반응형
반응형

* 지연(Delay) 함수 예제

 

메인화면

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CSharp_Delay
{
    public partial class Form1 : Form
    {
        //지연 시간 잴 변수...
        DateTime dtDelayStart;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            dtDelayStart = DateTime.Now;

            //지연 함수 사용...
            //5초간 지연
            DelaySystem(5000);
            //System.Threading.Thread.Sleep(5000);

            //지연 시간 구하기...
            TimeSpan ts = DateTime.Now - dtDelayStart;
            lblTime.Text = ts.Seconds.ToString();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            lbl.Text = "지연 시간 중 버튼 Click...";
        }

        //지연 함수...
        private void DelaySystem(int MS)
        {
            /* 함수명 : DelaySystem
             * 1000ms = 1초
             * 전달인자 : 얼마나 지연시킬것인가에 대한 변수
             * */
            DateTime dtAfter = DateTime.Now;
            TimeSpan dtDuration = new TimeSpan(0, 0, 0, 0, MS);
            DateTime dtThis = dtAfter.Add(dtDuration);
            while (dtThis >= dtAfter)
            {
                //DoEvent () 를 사용 해서 지연 시간 동안
                //버튼 클릭 이벤트 및 다른 윈도우 이벤트를 받을 수 있게끔 하는 역할
                //없으면 지연 동안 다른 이벤트를 받지 못함...
                System.Windows.Forms.Application.DoEvents();
                //현재 시간 얻어 오기...
                dtAfter = DateTime.Now;
            }
            
        }

        

    }
}

 

위 소스 예제를 보면 DelaySystem 함수 안 While 문 에 Application.DoEvents() 함수가 있습니다.

DoEvents() 함수 가 있고 없고 차이는 예제를 따라 하면서 주석 처리를 하시면 확연한 결과를 보실 수 있습니다.

주석에서 설명 드렸듯 윈도우의 다른 이벤트를 받을 수 있고 없고 인데 딜레이 함수 만드는 이유는

타이밍을 늦게 잡기 위해 딜레이 함수 밑에 코드 구현 구문을 조금 지연 시킨 뒤 실행 하고 싶으실 때

그럼 System.Threading.Thread.Sleep() 으로 하면 되지 않나 싶지만 이 또한 딜레이 함수에 DoEvents() 가 없는

결과와 같습니다. 

 

하지만 DoEvents() 함수의 남발한 사용 및 사용 위치에 따라 상상하지 못한 결과를 얻으실 수도 있습니다.

 

* 예제 결과

 

지연함수 진행 중일때 누른 버튼 클릭

말씀 드렸듯 지연함수는 그대로 돌고 있으며 다른 버튼을 클릭 했을 때의 이미지 입니다. DoEvents() 가 없이 저 버튼을

클릭 하였다면 5초뒤에 이벤트가 실행되는 현상을 보실 수 있습니다.

 

결과 화면

 

반응형

+ Recent posts