스테이 그라피 (비트 맵에 텍스트 숨김) 응용 프로그램을 만들었으며 진행률 표시 줄을 추가하여 프로세스가 얼마나 오래 작동하는지 보여주고 싶습니다.진행률 표시 줄을 표시하는 방법은 무엇입니까?
procedure TForm1.Button2Click(Sender: TObject);
var
x,y,i,currentBit,bitInChar,currentChar,currentPixel,newPixelValue,pixelsToSkip,skippedPixels: integer;
pixels: PByteArray;
bmp: TBitmap;
stringToHide: string;
begin
if Image1.Picture.Bitmap=nil then
showmessage('gambar belum dipilih')
else
memo1.lines.clear;
stringToHide := AntiKeyLoggerMemo1.text;
stringToHide:= stringToHide + chr(terminator); // add terminator to indicate end of text
Image2.Picture.Assign(Image1.Picture.Bitmap);
bmp := Image2.Picture.Bitmap;
x := 0;
y := 0;
pixels := bmp.ScanLine[y];
// iterate over the chars in the string we want to hide
for i := 1 to length(stringToHide) do
begin
currentChar := ord(stringToHide[i]);
memo1.lines.append('');
memo1.lines.append('Sembunyikan ' + stringToHide[i] + ' - Ascii ' + inttostr(currentChar) + ' (biner ' + toBinary(currentChar) + ')');
// iterate over the bits in the current char
for currentBit := 7 downto 0 do
begin
begin
if (i = 1) and (currentBit = 7) then
pixelsToSkip := 0
else
pixelsToSkip := 1;
end;
for skippedPixels := 1 to pixelsToSkip do
begin
inc(x);
if x = bmp.width then
begin
x := 0;
inc(y);
if (y = bmp.height) and (i < length(stringToHide)) then raise Exception.create('gambar terlalu kecil');
pixels := bmp.ScanLine[y];
end;
end;
bitInChar := getBit(currentChar, currentBit);
// get the value of the pixel at x,y
currentPixel := pixels[x];
// set the least significant bit of the pixel to the bit we read from the char
newPixelValue := setBit(currentPixel, 0, bitInChar);
pixels[x] := newPixelValue;
memo1.lines.append('Bit karakter ' + inttostr(currentBit) + '=' + inttostr(bitInChar) +
', pixel ke ' + inttostr(x) + ',' + inttostr(y) + ' desimal ' + inttostr(currentPixel) + ' (biner ' + toBinary(currentPixel) + ') ' +
' desimal baru ' + inttostr(newPixelValue) + ' (biner ' + toBinary(newPixelValue) + ')');
end;
end;
memo1.lines.append('All done!');
Button4.Enabled :=True;
Button2.Enabled:=False ;
Button5.Enabled:=True;
Button1.Enabled:=False;
AntiKeyLoggerMemo1.ReadOnly:=True;
end;
프로세스 진행률 표시 줄을 어떻게 만듭니 까? 명령 진행률 표시 줄을 어디에 두어야합니까?
@TLama : 글쎄, GUI 스레드에서 실행하면 문제가 생깁니다. –
계산을 별도의 스레드로 옮겨야합니다. –
@ Andreas, 나는 내 의견을 오히려 삭제했습니다 ... – TLama