Q를 실습해 봤습니다.

실습 내용은 은행의 창구와 대기표를 구현했습니다.

공부는 류종택님의 동영상 강의를 보면서 했습니다. 유용한 강의라 좋습니다.

 

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,TicketQueue ;

.

.

.


  private
    { Private declarations }
    FTicketQueue : TTicketQueue;
    procedure m_Display;
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.dfm}

procedure TfrmMain.btnaddClick(Sender: TObject);
begin
   FTicketQueue.AddWaittingList;
   m_Display;
end;

procedure TfrmMain.btnTurn1Click(Sender: TObject);
var
   CurrNo : Integer;
begin
    if FTicketQueue.Empty then
    begin
       showMessage('대기하고 있는 손님이 없습니다.');
       exit;
    end;
   CurrNo := FTicketQueue.pop;
   memoDisplay.Lines.Values['[1번 창구]'] :=Format('  %d번 손님 창구로 오세요.',[CurrNo]);
   lblOne.Caption := IntToStr(CurrNo);
   m_Display;
end;

procedure TfrmMain.btnTurn2Click(Sender: TObject);
var
   CurrNo : Integer;
begin
    if FTicketQueue.Empty then
    begin
        showMessage('대기하고 있는 손님이 없습니다.');
        exit;
    end;
   CurrNo := FTicketQueue.pop;
   memoDisplay.Lines.Values['[2번 창구]'] :=Format('  %d번 손님 창구로 오세요.',[CurrNo]);
   lblTwo.Caption := IntToStr(CurrNo);
   m_Display;
end;

procedure TfrmMain.btnTurn3Click(Sender: TObject);
var
   CurrNo : Integer;
begin
    if FTicketQueue.Empty then
    begin
        showMessage('대기하고 있는 손님이 없습니다.');
       exit;
    end;
   CurrNo := FTicketQueue.pop;
   memoDisplay.Lines.Values['[3번 창구]'] :=Format('  %d번 손님 창구로 오세요.',[CurrNo]);
   lblThr.Caption := IntToStr(CurrNo);
   m_Display

end;

procedure TfrmMain.Button1Click(Sender: TObject);
begin
   FTicketQueue.Clear;
   memoDisplay.Lines.Clear;
   lblOne.Caption := '00';
   lblTwo.Caption := '00';
   lblThr.Caption := '00';
   m_Display;
end;

procedure TfrmMain.m_Display;
begin
    memoDisplay.Lines.Values['전체 대기자']:=IntToStr(FTicketQueue.Count);
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
    FTicketQueue := TTicketQueue.create;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
    FTicketQueue.free;
end;

end.

 

 

unit TicketQueue;

interface
uses
   Classes, SysUtils;
  
type
   TTicketQueueNode = class
   private
   public
      Next : TTicketQueueNode;
      No : Integer;
   end;

   TTicketQueue = class
   private
      FHead, FTail   : TTicketQueueNode;
      FCurrentNo     : Integer;
      FCount         : Integer;
      function  GetEmpty : boolean;
   public
      procedure Clear;
      procedure AddWaittingList;
      function  pop:integer;
   published
      property Empty : Boolean read GetEmpty;
      property Count : Integer read FCount;
end;

implementation

procedure TTicketQueue.AddWaittingList;
var
   Item : TTicketQueueNode;
begin
   FCurrentNo  := FCurrentNo +1;
   FCount      := FCount + 1;

   Item := TTicketQueueNode.Create;
   Item.No := FCurrentNo;

   if FHead = nil then FHead := Item;

   if FTail <> nil then FTail.Next:= Item;
   FTail := Item;
   FTail.Next := nil;
end;

procedure TTicketQueue.Clear;
begin
   while Empty = False do pop;

   FCurrentNo  := 0;
   FCount      := 0;
end;


function TTicketQueue.GetEmpty:Boolean;
begin
   Result := FHead = nil;
end;

function TTicketQueue.pop: integer;
var
   item : TTicketQueueNode;
begin
   if Empty then raise Exception.Create('TicketQueue가 비어있습니다.');

   FCount  := FCount -1;
   item := FHead;
   FHead := FHead.Next;

   Result := item.No;

   FreeAndNil(item);
end;

end.

 

 

TextView 에서 스크롤 기능 추가

 

XML 부분 의 내용

 

<TextView

android:text="aaaaaaaaaaaaaaaaaaaaaaaa\n

              abbbbbbbbbbbbbbbbbbbbbbbaa\n

              ccccccccccccccac\n

              eeeeeeeeeeeeeeee\n

              errrrrrrrrrrrrrrrrr"

             

android:id="@+id/txt01"

android:layout_width="wrap_content"

android:layout_height="50px"

></TextView>

 

 

Activity 부분 (java)

 

public class MainActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

            TextView txt01=(TextView)findViewById(R.id.txt01); 

//스크롤 가능

            txt01.setMovementMethod(new ScrollingMovementMethod());                         

    }

}

 

 

 

'Android' 카테고리의 다른 글

[Android]Layout 뷰의 기능들...  (0) 2012.05.25
[Android]CP(Content Provider)  (0) 2012.05.24
[Android]SQLite 접근하기  (0) 2012.05.23
[Android]SQLite Manager 설치  (0) 2012.05.23
[Android]안드로이드 이벤트 종류와 방법  (0) 2012.05.21

마우스 좌표를 구하는 두가지 방식입니다.

 

첫번째 윈도우 상에서의 마우스 좌표

 

procedure TForm1.Image1Click(Sender: TObject);
var
   fpint : TPoint;                                        //Tpoint 타입
begin
   Windows.GetCursorPos(fpint);                //윈도우상에서의 무우스 좌표
      StartX := fpint.X                                  // X좌표 추출
      StartY := fpint.Y                                  // Y좌표 추출
      lblView.Caption := 'X : '+IntToStr(StartX)+'  Y : '+IntToStr(StartY);
   end ;
end;

위에서 보듯 이벤트 자체가 마우스 클릭 이벤트입니다.

 

 

두번째 이미지 캔버스 안에서 만의 마우스 좌표

 

procedure TfrmMain.imgMainMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   lblView.Caption := 'X : '+IntToStr(X)+' Y : '+IntToStr(Y);

end;

이번에는 마우스 다운 이벤트로 이 프로시져 자체가 x,y좌표를 인수로 갖는다. 그냥 활용만 하면 됩니다.

배드 테스트 프로그램 ETC 2012. 5. 22. 14:43

하드 디스크의 배드 섹터 검사 프로그램입니다.

 

이유없이 사용중 블루스크린 뜨거나 하면 가끔 하드디스크에

 

배드일 수도 ...ㅋ

 

지엠_데이터_hdd_scan_v2.0-tmteam.exe

다들 아시는 3DP입니다.

 

칩셉,드라이브,랜 등을 자동 으로 잡습니다.

 

3DP_Chip_v1105.exe

드라이브 잡는 3DP_Net_v1105도 있는데 용량이 커서 안되네요

 

차후 방법을 알면 올릴게요

 

'ETC' 카테고리의 다른 글

Eclipse 유용한 단축키  (0) 2012.05.23
배드 테스트 프로그램  (0) 2012.05.22
가상드라이브 프리웨어  (0) 2012.05.22
자격증 등급입니다. 열심히 해서 Get해요.  (0) 2012.05.21
spell 2.8 우클릭 방지 해제  (0) 2012.05.21

가상드라이브 기능 + 굽는기능까지!!

 

데몬 대체로 괜츈.

 

http://arainia.com/software/gizmo/download.html

 

gizmo-279-setup.exe

OnSelectCell 이벤트에서 변경.

 


procedure SelectCell(Sender: TObject; ACol, ARow: Integer; var FSelect: Boolean);
begin
    if (ACol = Col) and (ARow = Row) then
begin
    {컬럼에서 수정모드 막음}
    TStringGrid(Sender).Options := TStringGrid(Sender).Options - [goEditing];
end
else
    TStringGrid(Sender).Options := TStringGrid(Sender).Options + [goEditing];
end;

 

 

델파이에 사용되는 VCL 레퍼런스입니다.

출처는 김상형 저 델파이정복 4.0 의 부록 내용입니다.

알파벳 순으로 되어있고요 그리 많은 양은 아니니 참고용으로 사용하세요

 

델파이_VCL_레퍼런스.PDF

 

델파이에 사용되는 함수들의 레퍼런스입니다.

 

출처는 김상형 저 델파이정복 4.0 의 부록 내용입니다.

 

알파벳 순으로 되어있고요  그리 많은 양은 아니니 참고용으로 사용하세요

 

델파이_함수_레퍼런스.PDF

Event 4가지 사용 방법

 

Event 번째 방법

(1) Main.xml --> 버튼생성

<Button

android:text="OK"

android:id="@+id/btnOK"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

 

(2) MainActivity.java----> 이벤트 소스 얻기

 

        Button btnOK=(Button)findViewById(R.id.btnOK);

        btnOK.setText("OK!!!");->>버튼 이름

        //이벤트 처리

        //1.이벤트 소스 얻기

        btnOK.setOnClickListener(new ButtonHandler());

(3) public class ButtonHandler implements OnClickListener {<--리스너 인터페이스

                       //4.메소드 구현

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("test", "OK Click");<--로그보기

}//end onClick

}//end class

 

Event 두번째 방법

(1) main.xml

<Button

android:text="@+id/Button01"

android:id="@+id/Button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"></Button>

(2) MainActivity.java   <--inner method

public class MainActivity extends Activity implements OnClickListener {

    /** Called when the activity is first created. */

    @Override

 

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button btnOK=(Button)findViewById(R.id.Button01);

        //이벤트 처리

        //1.이벤트 소스

        btnOK.setOnClickListener(this);

}/end conCreate

      //3 추상 메소드 구현

     public void onClick(View v){

            Log.i("test", "Ok Click");

     }

}

 

Event 세번째 방법

 <--첫번째 방법과 다른점 (  MainActivity에서 상속받지않고 핸들러에서 상속 받음 )

그럴땐 View.리스너를 해워야 한다.

public class MainActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button btnOK=(Button)findViewById(R.id.Button01);

        btnOK.setOnClickListener(new ButtonHandler());

    }//end onCreate

    class ButtonHandler implements View.OnClickListener{

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("test", "ok!!!!!!");

}

}

}

 

Event 네번째 방법

<-- 많이 사용됨

public class MainActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        Button btnOK=(Button)findViewById(R.id.Button01);

        //이벤트 처리

        //1, 2

         btnOK.setOnClickListener(new View.OnClickListener() {

//3.  자체적 상속 받음

public void onClick(View v) {

// TODO Auto-generated method stub

Log.i("test","ok!!!ASDFSADFSADFSADF");

}

}

);

}

}

 

Evet 응용

public class MainActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //OK

        Button btnOK= (Button)findViewById(R.id.Button01);

       

        //Cancle

        Button btnCancle=(Button)findViewById(R.id.Button02);

              

        //이벤트 처리

        //1.

         btnCancle.setOnClickListener(new ButtonHandler());

         btnOK.setOnClickListener(new ButtonHandler());

    }//end onCreate

   

    //2. inner Class

 

    class ButtonHandler implements View.OnClickListener{

            //3.

public void onClick(View v) {

switch(v.getId()){ <-- ButtonView ID //외울것

case  R.id.Button01:

Log.i("test", "OK click");

break;

case R.id.Button02:

Log.i("test", "Cancel click"); 

break;

}

}

}

}

'Android' 카테고리의 다른 글

[Android]Layout 뷰의 기능들...  (0) 2012.05.25
[Android]CP(Content Provider)  (0) 2012.05.24
[Android]SQLite 접근하기  (0) 2012.05.23
[Android]SQLite Manager 설치  (0) 2012.05.23
[Android]TextView 에서 스크롤 기능 추가  (0) 2012.05.22