Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Выбор изображения, отображения его в окне программы и сохранение пути к нему. (http://forum.oszone.net/showthread.php?t=164619)

Virtyaluk 25-01-2010 18:10 1329573

Выбор изображения, отображения его в окне программы и сохранение пути к нему.
 
Помогите, пожалуйста
нужно создать окно программы, чтоб на нем была возможность, через кнопочку "Обзор", выбрать изображения(*.png, *.jpg, *.gif, *.bmp)
и сохранить этот путь в файл patch.ini лежащий в той же директории, что и сама программа.
+ желательно над кнопочкой "Обзор" форму для пред-осмотра(preview) выбранного изображения.
Помогите осуществить!

Drongo 25-01-2010 18:31 1329598

Цитата:

Цитата qE+
и сохранить этот путь в файл patch.ini лежащий в той же директории, что и сама программа. »

Код:

#include <inifiles.hpp>
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String Path = ExtractFilePath(Application->ExeName);
  TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"patch.ini");
  Ini->WriteString("PATH", "Directory",  Path);
}

Цитата:

Цитата qE+
нужно создать окно программы, чтоб на нем была возможность, через кнопочку "Обзор", выбрать изображения(*.png, *.jpg, *.gif, *.bmp) »

На вкладке Dialogs(Диалоги) выбрать и кинуть на форму компонент OpenPictureDialog

В нужный обработчик который открывает это диалоговое окно вписать
Код:

  if(OpenPictureDialog1->Execute())
      OpenPictureDialog1->Execute();


Virtyaluk 25-01-2010 18:45 1329616

Drongo,
при добавлении в кнопку строчек:
Код:

  String Path = ExtractFilePath(Application->ExeName);
  TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"patch.ini");
  Ini->WriteString("PATH", "Directory",  Path);

Кнопка Обзор не реагирует на действия пользователя т.е не открываться окно выбора изображения.
-*---*-
На вкладке Dialogs у меня нет OpenPictureDialog, есть TOpenPictureDialog.
Я перетаскиваю его, на окно моей программы, потом 2 разы щелкаю по созданной форме(чтоб перейти до редактирования кода в новой области),
а оно открывает "Проводник" для выбора картинки.Непонятно как-то.
-*---*-
Подскажите что делать?
или если вам не сложно, напишите готовый код всей программы для выполнения требуемых задач.

Drongo 25-01-2010 19:24 1329654

Цитата:

Цитата qE+
есть TOpenPictureDialog »

Это он и есть. Щёлкать по нему не нужно, у вас же за открытие диалогового окна отвечает кнопка Обзор... вот по ней щёлкайте, и в обработчике OnClick.

Готовый код для выполнения требуемых задач. Нужны компоненты Button, Image.
Код:

#include <inifiles.hpp>
...

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(OpenPictureDialog1->Execute()){
      Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
      String PathDirectory = ExtractFileDir(OpenPictureDialog1->FileName);
      String PathEXE = ExtractFilePath(Application->ExeName);
      TIniFile *Ini = new TIniFile(ExtractFilePath(Application->ExeName)+"patch.ini");
      Ini->WriteString("PATH", "Directory",  PathDirectory);
    }
}


Virtyaluk 25-01-2010 19:35 1329670

Drongo,
Button это кнопка, а Image это TOpenPictureDialog???
-*---*-
При добавлении строки:
Код:

#include <inifiles.hpp>
в основной код, приложение вообще не запускается, а при компиляции выдает ошибки:
"E2451 Undefined symbol 'OpenPictureDialog1'"
"E2451 Undefined symbol 'Image1'"

как это понимать??

Drongo 25-01-2010 19:52 1329694

Цитата:

Цитата qE+
а Image это TOpenPictureDialog??? »

Нет, Image это Image. Находится на вкладке Additional - компонент TImage

Цитата:

Цитата qE+
#include <inifiles.hpp> »

Это ж заголовочный файл, его нужно вверх, там где все #include стоят.

Код:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "MyRunProgram.h"
#include <inifiles.hpp>  // Например сюда...
#include <FileCtrl.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
...


Virtyaluk 25-01-2010 22:17 1329796

Drongo,
работает :)

но вот очередная проблема(ы):

-при открытии "Проводника" для выбора изображений
из перечисленных, нужных мне форматов присутствует только *.bmp.Зато есть ненужные мне *.ico и другие.
Как мне дописать нужные мне форматы и удалить не нужные??

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

-и не сохранился путь к картинке в ini-файл.
или эта функция при обычном(не откомпилированном) запуске не работает, надо только компилировать??

Drongo 26-01-2010 12:46 1330213

Цитата:

Цитата qE+
Как мне дописать нужные мне форматы и удалить не нужные?? »

Задачи себе такой не ставил, поэтому выводить рисунок в формате .jpg, .jpeg не умею. Дописать можно открыв фильтр и вписав необходимые расширения, но указаные форматы файлов присутствуют в фильтре, нужен код которы будет загружать и отображать файлы .jpg, и т.д.



Цитата:

Цитата qE+
Как исправить эту нелепость т.е. чтоб в заданной форме отображался весь рисунок?? »

Установить в свойствах компонента Image значения true в параметре AutoSize и Center. Смотрите скриншот.



Цитата:

Цитата qE+
-и не сохранился путь к картинке в ini-файл.
или эта функция при обычном(не откомпилированном) запуске не работает, надо только компилировать?? »

Надо выбрать необходимый файл, ведь как иначе программа узнает при запуске, путь к нужному вам файлу?

Drongo 26-01-2010 18:26 1330551

Цитата:

Цитата qE+
при открытии "Проводника" для выбора изображений
из перечисленных, нужных мне форматов присутствует только *.bmp.Зато есть ненужные мне *.ico и другие.
Как мне дописать нужные мне форматы и удалить не нужные?? »

Добавь к #include <inifiles.hpp> строку
Код:

#include <inifiles.hpp>
#include <jpeg.hpp> // Эту строку


Virtyaluk 27-01-2010 03:20 1330965

Цитата:

Цитата Drongo
Добавь к #include <inifiles.hpp> строку »

и допустим для *.png формата нада добавить это - #include <png.hpP> ??
А как удалить *.ico и другие не нужные форматы?

Drongo 27-01-2010 13:39 1331339

Цитата:

Цитата qE+
и допустим для *.png формата нада добавить это - #include <png.hpP> ?? »

Такого вроде бы нет. Для .png не знаю.

Цитата:

Цитата qE+
А как удалить *.ico и другие не нужные форматы? »

Так же как и добавляете, только наоборот. Вам нужно удалить ненужное расширение. коммент 8 Есть такие
Код:

*.jpg;*.jpeg;*.bmp;*.ico;*.emf;*.wmf
Допустим не нужно - .ico удаляете в строке *.ico;

Virtyaluk 27-01-2010 14:32 1331380

Drongo,
Странно, не заметил этой информации в том посте.
Но все равно спасибо.
Сейчас попробую, отпишу что вышло.


Время: 18:42.

Время: 18:42.
© OSzone.net 2001-