안녕하십니까..글을 읽어주셔서 감사드립니다..
구현하고자 하는 기능은 하나의 Tab1에서 실시간 정보를 보여줍니다..그러다가 그 중의 한놈을 선택을 하게 되면 또다른 Tab2으로 넘어가서 그 놈에 대한 실시간 정보를 보여줍니다..이때 실제로는 두개의 Tab창에서 각각 실시간 정보가 돌아가게 되겠죠..
그래서 쓰레드를 만들어야겠다고 결심을 하기에 이릅니다..근데 그게 잘 안되더라구요..쓰레드는 써본적이 없어서요..^^;;
그래서 테스트를 하고자 결심했습니다..Tab1에서 프로그래스바를 그려주다가 버튼을 클릭하면 다른 Tab창으로 넘어가서 거기서도 프로그래스바를 그리는 아주아주 허접한 쓰레드프로그램을 짜기에이릅니다..그런데....
이 Tab창이라는게 아주 문제더군요..두개가 작동하고 있을때 Tab선택이 안된다는겁니다..그래서 다시 테스트를 하고자 또 결심했습니다..그것이 아래의 코딩입니다..
Tab1에서 프로그래스바를 그려주다가(Button1 Click시) Tab2로 이동해서 여기서 버튼을 눌러주면(Button2 Click) 프로그래스바를 그려주게 되지요..그런데 역시나..
여기서도 Tab간의 이동이 안되더군요..이러면 의미가 없는데..
고수님들 부탁드립니다..어떻게 하면 좋을까요..시간도 없는데...
그리고 맨처음의 논제인 상세정보를 보고싶은놈을 클릭했을때 탭이 넘어가도록 하는부분은 어디에서 해줘야 아무 문제없이 두 탭을 자유자재로 왔다갔다하면서 정보들을 볼수있을까요..
부탁드립니다..좀 살려주세요...^^
unit Prior;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Memo1: TMemo;
ProgressBar1: TProgressBar;
Button1: TButton;
TabSheet2: TTabSheet;
Memo2: TMemo;
ProgressBar2: TProgressBar;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyThread1 = class(TThread)
protected
procedure Execute; override;
end;
TMyThread2 = class(TThread)
protected
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// 쓰레드 실행 프로시져
procedure TMyThread1.Execute;
var
I : Integer;
J : Integer;
begin
J := 0;
// 메모 컴포넌트를 지운다.
Form1.Memo1.Clear;
// 프로그레스바의 위치를 초기화한다.
Form1.ProgressBar1.Position := 0;
for I := 1 to 3000 do
begin
J := J + 1;
// 메모에 추가된 값을 출력한다.
Form1.Memo1.Lines.Add(IntToStr(J));
// 메모의 값을 프로그레스바에 반영한다.
Form1.ProgressBar1.Position := J;
end;
end;
procedure TMyThread2.Execute;
var
I : Integer;
J : Integer;
begin
J := 0;
// 메모 컴포넌트를 지운다.
Form1.Memo2.Clear;
// 프로그레스바의 위치를 초기화한다.
Form1.ProgressBar2.Position := 0;
for I := 1 to 3000 do
begin
J := J + 1;
// 메모에 추가된 값을 출력한다.
Form1.Memo2.Lines.Add(IntToStr(J));
// 메모의 값을 프로그레스바에 반영한다.
Form1.ProgressBar2.Position := J;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MyThread1 : TMyThread1;
begin
// 쓰레드를 시작한다.
MyThread1 := TMyThread1.Create(False);
MyThread1.Priority := tpHigher;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
MyThread2 : TMyThread2;
begin
// 쓰레드를 시작한다.
MyThread2 :=TMyThread2.Create(False);
MyThread2.Priority := tpHigher;
end;
end.
2. 굳이 선택되지 않은 폼에다가 그릴 필요가 있을까요?
쓰레드는 돌아가지만 그 폼이 Active 폼인지 아닌지를 체크해서 Active 폼일때만 그려주는게 더 좋을듯 싶네여.
동기화에 대해서 자세하게 공부해보십시오.