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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2013, 16:28   #1
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию Timage, ошибка

Добрый день! Нужна помощь в следующем вопросе! Недавно судьба свела меня с делфи. И вот возникла непонятная для меня ситуация. Есть 2 процедуры. Процедура ScanBtnClick -- сканирует изображение с планшета и сохраняет его в папку. Процедура LoadImg должна загружать изображение.

Плохо отрабатывает вот эта строка:
Image1.Picture.LoadFromFile(CreateN ame);
При пошаговой компиляции все отлично, но при работе приложения -- картинка не загружается.

вот код:

Код:
procedure TForm2.LoadImg();        // загружаем подпись на экран для просмотра
var
  CreateName : string;
  ScanPath   : string;
begin
  IniA:=TiniFile.Create(extractfilepath(paramstr(0))+'Anketa.ini');
  ScanPath:= IniA.ReadString('Path','ScanPath','');
  CreateName:=ScanPath+Fname.Text+Sname.Text+Fdate.Text+'.bmp';
  IniA.Free;
  if FileExists(CreateName) = true then
  begin
     Image1.Picture.BitMap.LoadFromFile(CreateName);
   //  Application.ProcessMessages;
  end;
end;

procedure TForm2.ScanBtnClick(Sender: TObject);
begin
   if (Fname.Text='') and (Sname.Text='') and (Tname.Text='') and (Pasport.Text='') then //проверка на заполнение полей перед сканированием
      Showmessage('Для сканирования подписи заполните все поля!')
   else
   begin
      IniA:=TiniFile.Create(extractfilepath(paramstr(0))+'Anketa.ini');
      IniA.WriteString('LastClientData','Fname',Fname.Text);
      IniA.WriteString('LastClientData','Sname',Sname.Text);
      IniA.WriteString('LastClientData','Tname',Tname.Text);
      IniA.WriteString('LastClientData','Date',Fdate.Text);
      IniA.Free;
      try
         Winexec('E:\D7\N1\menu\DemoButtonsProject.exe',SW_SHOW);
      except
         Showmessage('Ошибка сканирования!')
      end;
   end;
//   ScanBtn.Enabled:=False;
   LoadImg();
end;

Последний раз редактировалось Stilet; 16.07.2013 в 16:57.
Smallboy вне форума Ответить с цитированием
Старый 16.07.2013, 16:32   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
Image1.Picture.LoadFromFile(CreateName);
просто picture.
Кольша вне форума Ответить с цитированием
Старый 16.07.2013, 16:36   #3
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию

если просто Pictute то получается вот что:

[DCC Error] NewAnketa.pas(207): E2066 Missing operator or semicolon
[DCC Error] NewAnketa.pas(207): E2014 Statement expected, but expression of type 'TPicture' found

как мне кажется разгадка кроется тут, но не могу понять в чем дело:

При пошаговой компиляции картинка загружается отлично, но при работе приложения -ничего.

Последний раз редактировалось Smallboy; 16.07.2013 в 16:39.
Smallboy вне форума Ответить с цитированием
Старый 16.07.2013, 16:54   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

скорее всего ваш файл не создается.
вы же не ждете пока ваше приложение-сканнер закончит работу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.07.2013, 17:11   #5
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию

создается, это точно. Перед закрытием приложения-сканера, оно выдает сообщение -- файл сохранен, и пока не нажать "ОК" программа дальше не продолжает работать. В этот момент файл уже существует (проверял).
Да и дальнейшие действия с файлом проходят успешно...

P.S. самое интересное, что если запустить сканирование 2-й раз, то видно как загружается старый файл

Последний раз редактировалось Smallboy; 16.07.2013 в 17:15.
Smallboy вне форума Ответить с цитированием
Старый 16.07.2013, 17:26   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от Smallboy Посмотреть сообщение
создается, это точно. Перед закрытием приложения-сканера, оно выдает сообщение -- файл сохранен, и пока не нажать "ОК" программа дальше не продолжает работать. В этот момент файл уже существует (проверял).
Да и дальнейшие действия с файлом проходят успешно...

P.S. самое интересное, что если запустить сканирование 2-й раз, то видно как загружается старый файл
ТС, WinExec не ждет завершения программы, потому на момент вызова файла еще нет.
вам надо ждать пока ваше приложение отработает и лишь потом грузить файл.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.07.2013, 18:04   #7
Smallboy
Пользователь
 
Регистрация: 16.07.2013
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ТС, WinExec не ждет завершения программы, потому на момент вызова файла еще нет.
вам надо ждать пока ваше приложение отработает и лишь потом грузить файл.
Да, вы правы! Спасибо большое?
sleep(10000); помогло

Может подскажете каким образом можно сделать проверку на завершение процесса приложения?
Smallboy вне форума Ответить с цитированием
Старый 16.07.2013, 18:07   #8
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
Uses tlhelp32;
... 
function IsRunning(sName: string): boolean; // проверяет, запущен ли процесс sName
var
  han: THandle;
  ProcStruct: PROCESSENTRY32;
  sID: string;
begin
  Result := false;
 
  han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
  if han = 0 then
    exit;
 
 
  ProcStruct.dwSize := sizeof(PROCESSENTRY32);
  if Process32First(han, ProcStruct) then
  begin
    repeat
      sID := ExtractFileName(ProcStruct.szExeFile);
 
      if uppercase(copy(sId, 1, length(sName))) = uppercase(sName) then
      begin
 
        Result := true;
        Break;
      end;
    until not Process32Next(han, ProcStruct);
  end;
 
  CloseHandle(han);
end;
....
whie IsRunning('DemoButtonsProject.exe') do
sleep(500);
Кольша вне форума Ответить с цитированием
Старый 16.07.2013, 18:11   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,877
По умолчанию

Цитата:
Сообщение от Smallboy Посмотреть сообщение
Да, вы правы! Спасибо большое?
sleep(10000); помогло

Может подскажете каким образом можно сделать проверку на завершение процесса приложения?
CreateProcess + WaitForSingleObject
northener вне форума Ответить с цитированием
Старый 16.07.2013, 18:15   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ТС, смотрите в сторону CreateProcess.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Timage shelest Компоненты Delphi 1 26.05.2010 17:50
TImage Mania4e11o Компоненты Delphi 3 24.04.2010 17:25
ошибка при создании TImage Juffin Общие вопросы Delphi 9 22.04.2009 17:49
TImage Killbrum Помощь студентам 8 27.08.2008 22:40
TImage Andrey9392 Компоненты Delphi 6 06.04.2007 10:43