Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 12:53   #1
zih
Пользователь
 
Регистрация: 14.10.2010
Сообщений: 15
По умолчанию Gauge и Progress

На форме есть Gauge, которая постоянно меняется. Нужно после нажатия кнопки на форме вытащить значение с Gauge.progress и сравнить со значением которое я задал и если оно больше, меньше или равно значение progress'a нажать соответствующие кнопки.
Код:
 procedure TForm1.Button4Click(Sender: TObject);
 var
  p:hwnd;
  t: Integer;
begin
 p:=FindWindow(nil, PChar(ComboBox1.Text));
 Timer4.Enabled:=true;
 Button2.Enabled:=true;
 postMessage(p,WM_KEYDOWN,VK_F7,0);
 sleep(2000);
  form1.Gauge4.Progress:=t;
 label9.Caption:= inttostr(t);
 if t=100 then
  repeat
 postMessage(p,WM_KEYDOWN,VK_F3,0);
 sleep(2000)
 until t=0;
 postMessage(p,WM_KEYDOWN,VK_F4,0);
 postMessage(p,WM_KEYDOWN,VK_F4,0);
 button4.OnClick:=button4click;
end;
Сделал label9, чтобы посмотреть что же за число в progress, но там какое то большое оно получается и не меняется со временем.
Ромогите очень прошу.

Последний раз редактировалось Stilet; 23.10.2010 в 12:58.
zih вне форума Ответить с цитированием
Старый 23.10.2010, 13:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Объясни что ты хотел этим кодом сделать? Ибо он никак не вяжется с твоими словами:
Цитата:
Нужно после нажатия кнопки на форме вытащить значение с Gauge.progress и сравнить со значением которое я задал и если оно больше, меньше или равно значение progress'a нажать соответствующие кнопки.
Разве что так... Судя по твоим словам...
Код:
if form1.Gauge4.Progress=t then begin
  postMessage(p,WM_KEYDOWN,VK_F3,0);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2010, 13:14   #3
zih
Пользователь
 
Регистрация: 14.10.2010
Сообщений: 15
По умолчанию

Проблема в том что не могу считать значение с form1.Gauge4.Progress в label9 выводится большое число не соответсвующее progress'у.
zih вне форума Ответить с цитированием
Старый 23.10.2010, 15:23   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так посмотрите, что вы делаете.
Вы объявляете переменную t, а потом, не присвоив ей никакого значения, задаете
form1.Gauge4.Progress:=t;
А в t может быть все, что угодно, ведь ее значение не определено...
Вам нужно немного изменить:
Код:
 //form1.Gauge4.Progress:=t;
 label9.Caption:= inttostr(form1.Gauge4.Progress);
mihali4 вне форума Ответить с цитированием
Старый 23.10.2010, 20:07   #5
zih
Пользователь
 
Регистрация: 14.10.2010
Сообщений: 15
По умолчанию

В общем вот код проги
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Gauge1: TGauge;
    Image1: TImage;
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

 var
  p:hwnd;
  t: Integer;

begin
 p:=FindWindow(nil, PChar(nil));
  Timer1.Enabled:=true;
 if form1.Gauge1.Progress=100 then
  postMessage(p,WM_KEYDOWN,VK_F1,0); button1.OnClick:=button1click;
end;

procedure TForm1.Timer1Timer(Sender: TObject);

var
  dc:integer;
 bmp:TBitmap;
  i,k,j,n:integer;
   z:PByteArray;
  colors : array [0..255] of integer;
begin
 bmp := TBitmap.Create;
     Bmp.PixelFormat:=pf24bit;
    bmp.Width := image1.Width;
    bmp.Height := Image1.Height;
    DC:=GetDC(0);
 bitblt(bmp.Canvas.Handle,0,0,423,28,DC,423,28,SRCCOPY);
image1.Picture.Assign(bmp);
     if not (Image1.Picture.Bitmap.PixelFormat in [pf24Bit, pf32Bit]) then
        raise exception.create('Error, Format File not supported!');

     FillChar(colors,SizeOf(colors),0);
       n := Abs(Integer(Image1.Picture.Bitmap.ScanLine[1]) - Integer(Image1.Picture.Bitmap.ScanLine[0]));
     for i:=0 to Image1.Picture.Bitmap.height-1 do
     begin
          z:=Image1.Picture.Bitmap.ScanLine[i];
          for j:=0 to n-1 do
              inc(colors[z^[j]]);
     end;
     if colors[171]>0 then
     label2.Caption:=IntToStr(colors[171]);
     Gauge1.Progress:=round(strtoint(label2.Caption)*100/151);
end;

end.
Красным выделено то,что я хочу получить.
From Stilet: Ну выделил и что? Остальной код почему спецтегом не выделил? Или думаешь что пипл схавает твое неуважение?

Последний раз редактировалось Stilet; 23.10.2010 в 20:30.
zih вне форума Ответить с цитированием
Старый 23.10.2010, 20:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
p:=FindWindow(nil, PChar(nil));
Ты этим что получить хотел?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2010, 20:50   #7
zih
Пользователь
 
Регистрация: 14.10.2010
Сообщений: 15
По умолчанию

Приношу извинения за то что не выделил спецгетом ибо не знаю как.
На форме есть еще combobox. И правильно будет
Код:
p:=FindWindow(nil, PChar(ComboBox1.Text));
Но это не суть важно так как нажатия клавиш отсылает куда надо. Важно сделать так чтобы сверилось значение
Код:
if form1.Gauge1.Progress=100 then
zih вне форума Ответить с цитированием
Старый 23.10.2010, 21:11   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поставь брекпоинт на ту строку и посмотри по нажатию кнопки чему равен этот Progress
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2010, 22:31   #9
zih
Пользователь
 
Регистрация: 14.10.2010
Сообщений: 15
По умолчанию

Почему-то прога виснет после нажатия на button1. Может есть другие способы сравнивать значения gauge с тем что я задал в цикл?
zih вне форума Ответить с цитированием
Старый 23.10.2010, 23:28   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var t: Integer;
     p:hwnd;
begin
p:=FindWindow(nil, PChar(ComboBox1.Text));
Timer1.Enabled:=true;
while form1.Gauge1.Progress<100 do
Application.ProcessMessages;
postMessage(p,WM_KEYDOWN,VK_F1,0); 
button1.OnClick:=button1click; //это что за хрень ?
end;
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос про Gauge Diamand Компоненты Delphi 7 28.11.2013 13:11
Gauge компонент Erick Cartman Компоненты Delphi 2 27.03.2010 21:12
Елемент Gauge KatCH Общие вопросы Delphi 2 15.02.2010 19:18
Progressbar или Gauge Македонский Компоненты Delphi 19 17.08.2007 16:41