The Sequence of Events

Driven by Events
Visual Basic is an "event driven" language. What this means is that your coding
will be performed in the sequence that the events occur, as opposed to the
order in which it appears in your form module. It is therefore very important,
if you want to create quality applications, to know which events will happen
when.


Start Up and Shut Down Events
The most logical place to start would be the 6 events that occur when the form
loads up and the 3 events that occur when the form shuts down.
They are, in this sequence:

Start Up:
Form_Initialize
Form_Load
Form_Resize
Form_Activate
Form_GotFocus
Form_Paint
Shut Down:
Form_QueryUnload
Form_Unload
Form_Terminate



This is what happens most of the time. You know, with a normal form in a little
demo program. In many real life situations, things can be very different. Read
on.


The Form_Initialize event always happens, and it always happens first. After
that, unless something dreadful happens, like an END statement or a fatal error
(you cannot Unload at this stage), the next event will be triggered.


That event is always the Form_Load event, without exception. From this point on
you can unload the form, or do all sorts of other stuff to end the program - so
the following 4 events rely on this not happening. Let's assume that you don't
end the program at this stage.


The Form_Resize event will always happen, whether the form is visible,
minimized or maximized, it will happen. The form receives its physical
dimensions even if it is hidden - so after being loaded, it resizes.


The Form_Activate event is a little more picky. It will only happen if the form
becomes the active form in the application. If for example you have loaded
another form in this form's Load event, and that other form is the active one,
this form's Activate event will not happen until it becomes the activated form.
The event will also not be triggered if this form starts as minimized. Only
when the form is restored or maximized, and becomes active, does this event
occur. This event can of course happen any number of times in the lifetime of a
form. While your user jumps from form to form, the Form_Deactivate and
Form_Activate events occur, telling you whether your user is coming or going.


The Form_GotFocus event, like the Activate event, relies on the form being
visible. But even more picky - only when the form gets the focus. This hardly
ever happens, except if the form does not contain any other controls that can
get the focus. For example, if your form contains a command button, the button
gets the focus after the form loads up, and the Form_Gotfocus does not occur.
If you can think of a good use for this event, please let me know.


The Form_Paint event occurs whenever the form, or any part of it, gets redrawn.
So obviously it happens when the form becomes visible after loading up. It also
happens when you drag something over the form - as each part of the form
becomes exposed and is redrawn, the Form_Paint event occurs. Also, if you are
making a form bigger by resizing it, the parts of the form that becomes visible
as you drag it, triggers the Form_Paint event, sometimes several times a second.


Let's look at the three shut down events:
The Form_QueryUnload event is the first indication that the form wants to shut
down. This is triggered by using the VB "Unload" command, or by clicking the
little cross in the top right corner of the form, by pressing Alt-F4 to close
the form, when Windows is shutting down, when the form's MDIForm parent is
shutting down (if applicable), and so on. The only time your form will
disappear without triggering this event is if you pull the plug on your
computer, or a fatal error occurs in Windows or in your application, or if you
use the END statement. This event is commonly used for asking the user "Do you
want to save changes?" and then saving the changes if the user so wishes. You
can cancel the unloading of the form by setting the Cancel parameter to True
(or any non-zero value).


The Form_Unload event confuses a lot of people who all want to know what the
difference is between QueryUnload and Unload. Well, the main difference is that
the QueryUnload event is for asking the user "Do you want to save" and "Are you
sure?", and then tidying up user stuff, like saving changes etc. The Unload
event happens after the user has said "Yeah sure, go ahead" and you have saved
all the changes. Now you are tidying up the system stuff - making sure all
files are closed and all objects are set to nothing. Also making sure that all
other forms are also unloaded. You can Cancel the unloading of the form at this
point as well, although this is seldom done and is not recommended unless doing
so can save the user from potential loss of data.


The Form_Terminate event also happens.




The Other Events
Although starting up and shutting down are by far the most common event
sequences, there are several other very important combinations of events to
take note of, as listed delicately below:

Clicking on a Form:
Form_MouseDown
Form_MouseUp
Form_Click
Double Clicking on a Form:
Form_MouseDown
Form_MouseUp
Form_Click
Form_MouseMove
Form_DblClick
Form_MouseUp
Pressing a Key on a Form
Note that the active control of the form normally receives the Key events,
unless there is no active control, or if the KeyPreview property of the form is
True.
Form_KeyDown
Form_KeyPress
Form_KeyUp
Minimizing then Restoring a Form:
Form_Resize (when minimizing)
Form_Resize (When Restoring. No events occur while the form is minimized.)
Form_Paint
Calling a Message box from a Form
The form does not respond to ANY events while the message box is displayed.
Form_Paint (this only happens if a part of the form becomes visible when the
message box is closed.)
Dragging something onto a Form
If the Form's OLEDropMode property is set to "None", nothing happens, otherwise
the events below occur.
Form_OLEDragOver (occurs continuously while dragging.)
Form_MouseMove (once, when dropping)
Form_OLEDragDrop (once, when dropping)

ThisArticle_Terminate Event
There are of course many more combinations of events that you and your form may
experience, but I believe that the most common ones had been covered here. If
this article triggers enough question and request events, I might just write a
follow up.

'language > VB6' 카테고리의 다른 글

우수한 개체 지향 디자인으로 얻는 이익  (0) 2010.06.18
블로그 이미지

란마12

,

배치파일

etc 2010. 6. 18. 13:55

도스에는 명령어를 일괄적으로 처리하기위한 배치파일이라는 것이 있습니다.
대부분의 사람들은 배치파일이 도스환경을 쉽게 만든다는 사실을 과소평가하는데, 컴퓨터를 좀더 쉽게 사용하고 싶다면 배치파일을 꼭 짚고 넘어가는것이 좋습니다.

배치파일이란 ?

컴퓨터의 동작 상태를 살펴 보면 항상 사용자와의 상호작용에 의하여 작업이이루어진다는것을 알 수 있습니다.  도스라는 운영체제도 사용자가 명령을 입력하면 그 명령에 대해 도스가 분석하여 사용자가 원하는 실행 결과를 제공합니다.
따라서 사용자는 항상 도스 프롬프트 상에서 일일이 키보드를 이용한 타이핑으로 명령을 내려야 하고, 하나의 명령이 내려지면 완료될 때까지 다음 명령을 내릴수가 없습니다. 작업 과정이 얼마되지 않는다면 큰 상관이 없으나 그 과정이 매우 길고 복잡하다면 사용자는 지루함을 느끼게 됩니다. 또한 비록 짧은 작업과정이라도 컴퓨터를 켤때마다 매번 똑같은 과정을 일일이 지시하는 것도 귀찮을 것입니다.
이러한 경우 배치 파일은 가장 확실한 해결책입니다.

배치파일의 기능은 순차적이고 반복된 동일한 작업 과정을 몇개의 혹은 수십, 수백 개의 연관된 명령어를 하나의 파일로 집약하여 그 하나의 파일(배치파일)만 실행함으로써 원하는 작업 과정을 수행하는것입니다.배치파일에 붙는 확장자는 .bat(batch 의 약어) 입니다.도스에서 실행이 가능하기 때문에 .com, .exe 확장자가 붙는 외부 명령어와 함께 실행 가능한 파일로 분류됩니다.차이가 있다면 .com, .exe 명령어는 컴퓨터만 해석 가능한 기계어 코드로 구성되어 있는반면, 배치 파일은 사람이 알아볼수 있는 일반 텍스트로 이루어져있다는 것입니다.

그래서 사용자들은 문서작성에 이용하는 워드프로세서나 텍스트에디터 등을 이용해 배치 파일을 작성할 수 있습니다. 그러나 워드프로세서는 덩치가 크고 원래 목적이 편집과 출력을 위해 만들어진 것이므로 단순한 배치 파일을 작성하는 데는 권하고 싶지 않습니다.

저장할때도 워드프로세서 고유의 포맷(예" .hwp 확장자를 가지는 아래아한글 데이터 파일)으로 저장하면 인식이 되지 않으므로 아스키 파일로 저장해야 합니다.가장 편리한 방법은 일반 문서 에디터( 도스의 Edit, Q에디터,U에디터 등)를 이용하거나 도스의 'Copy Con' 명령으로 배치 파일을 만드는 것입니다.다음과 같이 'Copy con 파일명' 형식으로 입력하고 엔터를 누르면 도스 프롬프트 상태에서 편집할 수 있는 상태가 됩니다.
-------------------------------
C:\Bats> copy con Timedate.bat
cls
time
date
^Z

   1 File(s) copied
-------------------------------

여기서 쓰고 싶은 대로 적기만 하면 됩니다.제일 마지막행의 ^Z 는 파일의 제일 마지막 부분이라는 것을 도스에게 알려주는 코드로 <  Ctrl + Z > 키 또는 F6 키를 누르면 됩니다. 그리고 엔터키를 한번더 누르면 '1 File(s) copied' 라는 메세지가 출력되는데, 이는 방금 ' copy con 파일명 ' 으로 작성된 문서파일이 성공적으로 만들어졌다는 뜻입니다.위의 문서파일은 확장자가 .BAT 로 붙었기 때문에 실행가능한 외부 명령어가 되는데, 배치파일은 명령이 기록되어 있는 순서대로 실행되기 때문에 timedate.bat 를 실행시키면 먼저 화면을 지우고 난뒤 시스템의 시간과 날짜를 설정합니다.간단한 배치파일은 'copy con 파일명' 으로 작성하는 것이 다른 프로그램의 도움없이 쉽고 빠르게 처리할 수 있습니다. 하지만 배치파일이 조금 길거나 작성중에 수시로 편집할 일이 생기는 경우에는 불가능합니다. 'copy con 파일명' 으로 파일을 작성하면 행으로 다시돌아갈 수 없을 뿐 아니라 수정이 불가능하기 때문입니다. 그러므로 배치파일을 만들 필요가 있을때는 문서 에디터를 이용하는 것이 좋습니다.

▶  
배치파일 작성 명령어 9인방

배치 파일은 파일 안에 기록되어 있는 명령의 순서대로 실행됩니다.가장 대표적인 것이 부팅에 이용되며, 컴퓨터의 루트 디렉토리에 위치하고 있는 Autoexec.bat 파일입니다. 그런데 만약 배치 파일의 실행의 순서를 순차적이 아닌멀티부팅용 Autoexec.bat 처럼 사용자 마음대로 정하고 싶다면 배치파일에 제공되는배치명령어의 용도를 알고 있어야 합니다.


1. CALL


현재 실행중인 배치 파일을 종료하지 않고 필요한 다른 배치파일을 호출하여 실행한 다음 원래의 배치파일로  다시 돌아오려고 할 때 사용됩니다.

◇ 사용법 : Call [drive:]\[경로]\<배치파일명>[.BAT]

◇ 예  :  Call c:\bats\sample.bat

어떤 배치 파일을 실행하는 도중에 경로 C:\bats 에 있는  sample.bat 파일을 실행한 다음 다시 원래의 배치파일로 돌아옵니다.


2. CHOICE

배치 프로그램 내에서 사용자의 선택을 묻기 위해 사용됩니다. 배치 파일 제작자가 설정한 물음을 출력하면서 지정된 키 입력을 기다립니다. 이 명령은 배치파일 내에서만 사용 가능합니다.

◇ 사용법 :choice [/C[:]문자열][/N][/S][/T[:]기본키,대기시간][메세지]

◇ 옵션

- /C[:]문자열  : 사용자가 선택할 수 있는 키목록을 [] 괄호 내에 ', ' 로 구분하여 출력하고  /C 스위치를 사용하지 않으면 기본적으로  YN이 사용됩니다.

- /N : 프롬프트를 출력하지 않도록 합니다.

- /S : 사용자의 입력에서 소문자, 대문자를 구분하도록 합니다.

- /T[:]기본키, 대기시간 : 기본키를 지정한 후 대기시간 동안 사용자의 키 입력이 없으면  자동적으로 기본키가 입력된 것으로 간주하고 진행됩니다. 지정 가능한 대기시간은 초단위이며 0에서 99 사이의 값입니다.

- 메세지 : 화면에 출력될 메세지를 지정합니다.

◇ 예 : choice /c:abCD /s /t : C, 5 다음중에서 하나를 선택하십시오 a, b, C, D
◇ 설명 : 입력 가능한 키를 a,b,C,D로 한정하며 사용자로부터 입력되는 영문자의 대,소문자를 구분하는데, 만약 5초 내에 사용자로부터 키 입력이 없다면 C 가 입력된 것으로 간주합니다. 그리고 화면에는
'다음중에서 하나를 선택하십시오 a, b, C, D[a,b,C,D]? ' 
라는 메세지가 출력됩니다.


3. ECHO

배치파일 실행중에 명령어를 화면에 표시할 것인지의 여부를 설정하며, 그 상태를 표시합니다. 한편 ECHO 명령 뒤에 오는 메세지는 화면에 나타납니다.

◇ 사용법 : echo [on/off] [문자열]

◇ 옵션
- on : 배치 파일 실행중에 그 배치 파일 내의 명령어를 화면에 표시합니다. 
- off : 배치 파일 실행중에 명령어를 화면에 출력하지 않도록 합니다.
- 문자열 : 화면에 출력하고 싶은 메세지를 적어줍니다.
- 없음 : 현재 ECHO 설정 상태를 표시합니다.

◇ 예  :

echo off   
☞ 현재 실행중인 배치 파일 내의 명령어를 화면에  나타나지 않도록 함.
echo
echo 안녕하세요?~
☞ 현재 echo 설정상태를 표시하며  안녕하세요?~ 라는 문구를 화면에 출력합니다.  


4. FOR

지정된 집합 중의 각각의 요소에 대하여 명령으로 설정한 처리를 반복 실행합니다.

◇ 사용법

For %%<변수> IN (<집합>) DO <명령> [<옵션>]    ☞ 배치파일용. 
For %<변수> IN (<집합>) DO <명령> <옵션>]        ☞ 순차처리용.


◇ 옵션

- %%<변수>, &<변수>  : 변수로 사용되는 것은 임의의 영문자로 1자만 허용됩니다.  주의할 점은 배치파일에서 사용할 경우는 반드시 %%처럼 두개를 연달아 사용해야 하며, 일반 도스 프롬프트에서 사용할 때는 % 하나만 사용합니다.

- <집합> : %%<변수>에 대입하고 싶은 값을, 또는 스페이스로 구분하여 대입하고 싶은 순서대로 나열합니다.

- <명령> : %%<변수>에 대입되어 있는 값에대해 반복적으로 실행하고 싶은 명령을 지정합니다.

- <옵션> : 지정한 명령의 옵션이나 FOR 명령에서 지정한 옵션을 설정합니다.

◇ 예

for  %%f  in  (bak tmp $$$) do del *.%%f /p       ☞ 배치파일의 경우
for %d  in  (read,wh,file) do hlist %d*.*              ☞ 도스 프롬프트에서 실행시

◇ 설명 : 첫 번째는 bak, tmp, $$$ 를 순서대로 %%f 환경 변수에 대입하여 차례대로
 DEL *.bak /p, DEL *.tmp /p, DEL *.$$$ .p 를 실행한 것과 동일한 결과를 얻게됨.

두번째는 READ,WH,FILE 를 순서대로 %d 환경변수에 대입하여 차례대로
 HLIST READ*.*, HLIS TWH *.* , HLIST FILE *.* 를 실행한 것과 동일한 결과를 얻게 됩니다.


5. GOTO

배치 처리의 흐름을 <레이블>에서 정의되어 있는 위치로 옮깁니다.

◇ 사용법 : Goto <레이블>

◇ 예 :
goto loop
:loop
각종 처리할 내용


◇ 설명  : 레이블 loop 로 배치 처리의 제어권을 이동시켜 loop 항목에 지정된 각종 처리할 내용을 실행시킵니다.

◇ 참고  : 배치 파일에 레이블 표시는 레이블명 앞에 콜론(:) 을 붙여주며 줄을
              바꿔 맨 앞에 지정해 주어야 합니다.



6. IF

지정한 조건의 판단 결과에 따라서 배치 처리를 진행합니다.

◇ 사용법 :  If [NOT] <조건> <명령>

◇ 옵션

- NOT : 지정한 조건의 반대 조건일 때만 실행합니다.

- 조건

- ERRORLEVEL <수치> : 바로 전에 실행한 명령(프로그램)의 종료 코드가 <수치> 이상일 때에는 참이 되고 <명령> 이 실행됨.

- <문자열1> == <문자열2> : <문자열1> 과 <문자열2> 가 같을 때에만 참이되고 <명령>이 실행됩니다. 주의할 점은 문자열의 대,소문자가 구별되며, 문자열중에 구분기호(콤마,스페이스,세미콜론,등호,탭)가 포함되어 있으면 않됩니다.

- EXIST <파일명> : <파일명>으로 지정한 파일(경로포함)이 존재할 때에만 참이 되고    <명령>이 실행됩니다. <파일명>에는 와일드카드 문자의 사용이 가능합니다.

◇ 예 :
if errorlevel 2 goto quit
if not %1 ==%2 goto process
if exist d:\work\temp.$$$ del d:\work\temp.$$$


◇ 설명 :
직전에 실행한 명령의 종료 코드가 2 이상일 경우 레이블  QUIT로 이동합니다.

환경변수 %1과 환경변수 %2에 대입되어 있는 문자열이 같지 않을 경우에만 레이블 PROCESS 로 이동합니다.

경로 D:\Work 에 temp.$$$ 라는 파일이 존재하면 그 파일을 삭제합니다.


7. PAUSE

배치 파일 실행을 일시 정지합니다.

◇ 사용법 : Pause [문자열]

◇ 옵션

- 문자열 : 문자열을 생략하면 'press any key to continue...'라는 메세지가 화면에  출력됩니다. 만약 PAUSE 명령 뒤에 어떤 메세지를 지정하여 그 메시지를  출력하고 싶다면 'Echo On' 명령을 우선 내려야 합니다.

◇ 예 :   
 echo on
 pause  준비가 되었으면 아무키나 누르세요...


◇ 설명 :  배치 처리 중 pause명령을 만났을때 임의의 다른 메시지를 화면에 출력하고 싶다면 예 에서와 같이 반드시 echo on 명령이 선행되어야 하며 예의 경우에는  ' 준비가 되었으면 아무키나 누르세요...' 라는 메세지가 출력됩니다.

◇ 참고 :  위 처럼 하면 화면에 Pause 라는 명령어까지 같이 출력되므로 이런경우
echo on 
echo  준비가 되었으면 아무키나 누르세요...
pause > Null


이런식으로 사용하면 출력하고자 하는 메세지만 화면에 출력됩니다.


8. REM

배치 파일 내에 주석문을 부여하고 싶을 때 사용합니다.

◇ 사용법 : rem [문자열]

◇ 옵션    

- 문자열 : 주석문으로 쓰고 싶은 것을 적어줍니다.

◇ 예 : REM 이 배치파일은 샘플입니다.

배치파일내의 적당한 위치에 적절한 주석문을 붙여두면 배치 처리의 흐름을 일목요연하게 볼 수 있습니다.


9. SHIFT

배치 파일에 주어진 파라미터(%1~%9)와 실행시에 지정되는 값과의 대응을 하나씩 뒤로 이동하여 표시합니다.

◇ 예

:loop
if "%1" == " " goto end
echo %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
shift
goto loop
:end    


위와 같이 배치 파일을 작성해두고 다음과 같이 배치파일을  실행해 보면 shift 명령이 어떤 역할을 하는지 금방 알 수 있습니다..
C:\bats> test.bat A B C D E F G H I J 0 1 2 3 4 5  똑같이 입력하고 실행후 확인.

'etc' 카테고리의 다른 글

FTP vs HTTP  (0) 2011.04.14
파일날짜 변경 시점  (0) 2010.07.09
MSComm32.ocx 라이센스 등록  (0) 2010.06.18
컴퓨터명으로 IP알아내기  (0) 2010.04.19
원격데스크탑 클립보드 공유  (0) 2010.03.17
블로그 이미지

란마12

,

link

database/oracle 2010. 6. 18. 13:52

1. db link가 만들어지는 oracle에 link하고 자하는 oracle의 접속정보(tnsname.ora)가 있어야 한다.


2. grant create database link to TW_HSP_IMR;

create public database link link_test
connect to TW_HSP_IMR identified by HOSPITAL
using 'PMPA.WORLD'; -- 상대방 SID 이름, TNSNAME.ORA에 명시된 ALIAS


3. SELECT * FROM all_db_links;

DELETE TABUSER@LINK_TEST


4. ORA-02085: database link TATATA.WORLD connects to ORACLE

위의 경우와 같이 정상적으로 DB Link를 만든후 에러가 날경우 Init.ora File의
global_names Parameter를 확인하여 FALSE로 되어 있는지 확인해야 한다.

5. 8i에서 7로 링크할 경우 다음과 같은 에러가 발생할 수 있다.

ORA-01011: Cannot use v7 compatibility mode when talking to v6 server

원인: An attempt was made to use Oracle7 compatibility mode
when accessing Oracle Version 6.
v6와 v7간에 char처리가 틀려서 그렇다는데 확실히 모르겠다.

해결: sql*plus에서 set compatibility v7;

추가설명: COM[PATIBILITY] {V6|V7|NATIVE}
specifies the version of Oracle to which you are connected.
Set COMPATIBILITY to V6 for Version 6 or V7 for Oracle7. Set

COMPATABILITY to NATIVE if you wish the database to determine the
setting (for example, if connected to Oracle7, COMPATIBILITY would
default to V7). Note that you can set COMPATIBILITY to V6 when
connected to Oracle7. This enables you to run Version 6 SQL
against Oracle7.

Setting COMPATIBILITY to V6 causes SQL*Plus to treat CHAR
column values as variable length character strings.
Setting COMPATIBILITY to V7 causes SQL*Plus to treat CHAR
COLUMN VALUES as fixed length character strings and
VARCHAR2 (VARCHAR) column values as variable length
character strings.

See the Oracle7 Server documentation for a list of changes
from Version 6 to Oracle7.

'database > oracle' 카테고리의 다른 글

time interval  (0) 2010.06.18
블로그 이미지

란마12

,

리소스 탐색기에서 다이얼로그 속성창에서 언어를 다른 언어로 바꿔본다.
블로그 이미지

란마12

,


api_list-drvoss.zip

요즘 애플리케이션을 만들다 보면, 프로그래머는 당연히(?) 2000 sp4이상 환경을 생각합니다. 적어도 2000 sp4이상 이여야 원활한 API 환경이 갖추어 지는 데다가, VisualStudio2008도 쓸 수 있고, 편하기 때문입니다.

 

그런데 가끔, 애플리케이션상 98을 지원해야 될 때가 있습니다. 클라이언트 도메인에 98 컴퓨터를 아직 사용하고 있는다던지, POS같은 98이 설치된 하드웨어 단말기가 많은 고객이라던지 아니면 범용적인 압축 애플리케이션을 만든다던지 등등

 

98을 지원하려면 일반적으로 Visual Studio 2005이하 버전에 포함되어 있는 컴파일러에서 멀티바이트 바이너리 형태로 컴파일 되는게 좋습니다. 이런 부분들이 지켜 진다면 다음으로 살펴볼 부분은 98에서 사용할 수 없는 API가 쓰였는가 입니다.

 

 

프로그래머는 xp에서 작업하기 때문에 여러 사람이 공동 작업을 하다 보면 누가 어떤 API를 썼는지 신경을 못 쓰게 됩니다. 만일 클라이언트 컴퓨터에 2000이 포함되어 있는데, xp이상에서만 돌아가는 API를 사용하게 되면 문제가 생깁니다.

 

예를 들어

 

GetProcessId 같은 함수의 모양새는 아주 범용적으로 생겼지만, vista에서만 쓸 수 있는 API 입니다. 서비스팩이 설치되어 있지 않은 xp에서는 문제의 소지가 다분하게 됩니다.

 

 

그렇다고 코드를 까서 다 살펴 볼 수도 없을꺼고, 문제가 생기길 기다렸다가 98에서 소스의 한줄씩 트레이싱하면서 리턴값을 체크하는 형태의 디버깅을 해볼 수도 없는 노릇입니다.

 

 

command 명령어에서 findstr을 사용하면 간단하게 문자열을 체크해 볼 수 있습니다.

 

findstr /s /g:사전파일 *.cpp *.c *.h *.hpp

 

 

이걸 이용하면 현재 지원해야 하는 최소의 OS에서 지원하지 않는 API가 쓰였는지 필터링 해 줄 수 있겠죠.

 

결과는 아래처럼 나타납니다.

target소스

#include <windows.h>

#include <iostream>

#include <process>

 

void main()

{

    YieldProcessor();

    DWORD pid = GetProcessId(GetCurrentProcess());

    YieldProcessor();

    int pid2 = _getpid();

    YieldProcessor();

    std::cout << pid << std::endl << pid2 << std::endl;

    YieldProcessor();

 

    return;

}

 

 

 



 

 

 

Main.cpp에서는 비스타 이상에서만 지원하는 함수들이 쓰였기 때문에, 이 애플리케이션은 xp이하 머신에서는 비정상 동작할 확률이 있습니다.

 

보너스로 각각 2000, xp, vista 이상에서 사용되는 함수 목록을 첨부합니다. 함수 뿐 아니라, OS에 종속적인 함수 인자 플래그 값같은것도 별도 파일로 만들어 놓고 릴리즈 하기 전에 검사해보면 좋을것 같습니다.


'temp' 카테고리의 다른 글

jquery  (0) 2010.06.08
ASP.NET에서 C++또는 C로 만들어진 DLL을 로딩하는 방법  (0) 2010.06.08
블로그 이미지

란마12

,

jquery

temp 2010. 6. 8. 21:24

자바스크립트 라이브러리 중에 JQuery보다 더 좋은 라이브러리는 더 이상 없을 것입니다.
디자인과 웹표준과 개발시간단축이라는 3가지를 모두 만족시켜버리네요.
어찌보면 기존 웹 개발자들의 단가를 확~~ 깍아버리는~~ ㅎㅎㅎ 잘만 사용하면 쵝오의 생산성을 내게 하는 라이브러리~~
잘들 정리해서 프로젝트에서 사용하삼...( 일반 사이트는 디자이너가 필요 없어질 수도.... , 디자이너들에게는 나쁜라이브러리 인듯)

자신이 직접 확장하여 라이브러리를 개발 할 수 있는 능력을 구비하면 좋겠지만... 이~~ 대한민국이라는 나라에서는 전혀 쓸모없는 능력일 수도 있으니 잘 판단들 하시고~~ (JQuery확장기술은 다른 스크립트라이브러리 확장기술보다는 익혀놓을만 한듯 왜? 표준코딩이 가능하니깐) 일단은 잘 가져다가 적재 적소에 잘 사용하는 능력부터~~


당연히 JQuery기본 예제들은 반드시 익혀서 적용가능한 능력을 구비해야함
ASP.NET과 혼용하여 잘~사용하면 쵝오의 웹개발 플랫폼임. 개인적으로 웹에서 MVC보다 ASP.NET을 좋아함
ASP.NET에서 특별한 경우를 제외하고는 ViewState나 EventArgState?인가 요 두놈은 false로 두고 사용들 하시길~~


탭(기본탭 있지만 요놈도 좋으네요)
http://stilbuero.de/jquery/tabs_3/

 

메뉴
http://www.dynamicdrive.com/dynamicindex1/ddsmoothmenu.htm#


마우스 우측클릭 context메뉴 (정말 잘만들었네)
http://www.javascripttoolbox.com/lib/contextmenu/

벨리데이션
http://bassistance.de/jquery-plugins/jquery-plugin-validation/

트리
1. 호호 잘만들었네요
http://plugins.jquery.com/project/acts_as_tree_table
데모 http://ludo.cubicphuse.nl/jquery-plugins/acts_as_tree_table/doc/index.html#examples

이 사이트에는 건질게 많음
http://www.filamentgroup.com/lab/jquery_aria_tree_control_from_book_designing_with_progressive_enhancement/


테이블

1. 컬럼필터 기능인데 웹에서 필요할까나? 윈폼이멘 몇만건에서 필터링 은 필요한데.... 혹시나 해서
  http://plugins.jquery.com/project/ColumnFilters
http://www.trirand.com/blog/?p=13

우리나라 정서에는 http://datatables.net/examples/ 요녀석이 제일 나을듯


2. 잘맹걸었네~~~
http://plugins.jquery.com/project/flexigrid
데모 http://flexigrid.info/


이미지 줌
쇼핑몰에서 이용하면 짱~
http://www.mind-projects.it/projects/jqzoom/index.php#examples

 

차트
http://code.google.com/p/flot/

html5 canvas access차트
http://www.filamentgroup.com/lab/creating_accessible_charts_using_canvas_and_jquery/

 


버튼
http://www.filamentgroup.com/lab/update_styling_the_button_element_with_css_sliding_doors_now_with_image_spr/
theme확장법
http://www.filamentgroup.com/lab/styling_buttons_and_toolbars_with_the_jquery_ui_css_framework/


드랍다운(쵝오)
http://www.filamentgroup.com/lab/jquery_ipod_style_and_flyout_menus/
http://www.filamentgroup.com/lab/jquery_ui_selectmenu_an_aria_accessible_plugin_for_styling_a_html_select/

툴팁
http://www.filamentgroup.com/lab/image_free_css_tooltip_pointers_a_use_for_polygonal_css/


Multiple Theme
http://www.filamentgroup.com/lab/using_multiple_jquery_ui_themes_on_a_single_page/


테이블 모서리 둥글게(IE에만 해당)
http://www.filamentgroup.com/lab/achieving_rounded_corners_in_internet_explorer_for_jquery_ui_with_dd_roundi/

엄선리스트라고 사이트
http://blog.naver.com/seogi1004?Redirect=Log&logNo=110085431616

 

이분 Rick Strahl  포스팅 내용은 꼭 볼것 샘플도 있삼 asp.net과 연동하는 부분인듯 합니다. (내용좋으면 나중에 새로 정리)

http://west-wind.com/weblog/posts/459197.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+RickStrahl+%28Rick+Strahl%27s+WebLog%29&utm_content=FeedBurner

읽어볼 내용
http://blog.galaxark.com/2010/05/20-jquery-plugins-that-enhance-html-form-elements/

필자가 작성해본 신청폼
http://www.xamller.net/WebApp/WebUI/ListFormSamples/RegistUser.aspx

블로그 이미지

란마12

,

1.다음과 같이 DLL을 로딩하여 DLL내의 함수를 호출하는 코드를 작성합니다.

    public class FileFilter
    {
        [DllImport("EurekaFilter.dll", CharSet = CharSet.Auto)]
        public static extern bool Doc2Txt(
            byte[] filename
            );

        public FileFilter()
        {
        }

         public string GetTextByFile(string filePath)
        {
            string s = "";

            byte[] FilePathByte = new byte[filePath.Length * 2 + 10];
            FilePathByte = Encoding.Default.GetBytes(filePath);
            string[] ext = filePath.Split('.');
            Doc2Txt(FilePathByte);     // DLL내의 함수를 닷넷처럼 호출한다.

            .....
        }
    }

2. 로딩할 DLL을 서버에 폴더를 만들어 복사하여 놓는다.
   (주의 : C++, C는 DLL이 동작하기 위해서 다른 참조 DLL이 필요한 경우가 대부분임.(mfc.dll 등) 이 DLL로 함께 복사할 것)

3. 만들어진 폴더을 다음과 같이 코딩 하여 환경 변수에 추가한다.

   // global.asax파일에서 코딩을 한다.

    void Application_Start(object sender, EventArgs e)
    {
        // 응용 프로그램이 시작될 때 실행되는 코드입니다.
        String _path = String.Concat(System.Environment.GetEnvironmentVariable("PATH"), ";", @"D:\CPlusDll");
        System.Environment.SetEnvironmentVariable("PATH", _path, EnvironmentVariableTarget.Process);
    }

4. 첨부내역(샘플)
- 첨부파일에서 텍스트만 추출하는 방법(샘플코드) : FileFilter.cs
- 참조하는 파일 : 사이냅 필터.zip
- MFC참조파일 : mfcDLL.zip
- 2개의 zip파일은 컴파일시 필요로 하지 않음.
  (단, 동작시 같은 디렉토리에 있거나 위 3번에서 설정한 디렉토리에 존재해야 함.)

'temp' 카테고리의 다른 글

이 애플리케이션은 특정 OS에서도 돌아가나요?  (0) 2010.06.08
jquery  (0) 2010.06.08
블로그 이미지

란마12

,

- NetBIOS연결을 위해 컴퓨터명으로 목적지 컴퓨터에 접속(예: 실행창에서 \\목적지컴퓨터명)
- NetBIOS연결목록을 조회하기 위해 커맨드창에서 nbtstat -S

'etc' 카테고리의 다른 글

FTP vs HTTP  (0) 2011.04.14
파일날짜 변경 시점  (0) 2010.07.09
MSComm32.ocx 라이센스 등록  (0) 2010.06.18
배치파일  (0) 2010.06.18
원격데스크탑 클립보드 공유  (0) 2010.03.17
블로그 이미지

란마12

,
- ClipBook, Network DDE, Network DDE DSDM 서비스 시작.
- 원격지 컴퓨터는 하지 않아도 됨.
- 기 연결된 원격데스크탑은 재연결해야 함.

'etc' 카테고리의 다른 글

FTP vs HTTP  (0) 2011.04.14
파일날짜 변경 시점  (0) 2010.07.09
MSComm32.ocx 라이센스 등록  (0) 2010.06.18
배치파일  (0) 2010.06.18
컴퓨터명으로 IP알아내기  (0) 2010.04.19
블로그 이미지

란마12

,

copy

library/STL 2010. 2. 9. 10:42

  • vector
    - vec1을 vec2로 copy
       vec2.resize(vec1.size());
       std::copy(vec1.begin(), vec1.end(), vec2.begin());

 

'library > STL' 카테고리의 다른 글

STL관련 step into무시하기  (0) 2011.04.21
erase  (0) 2010.12.14
map insert 반환값  (0) 2010.09.12
블로그 이미지

란마12

,