Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

Lightosaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем!
 
Уже несколько дней изучаю явление, которое может быть интересно и вам.
Вдруг и меня кто уму разуму наючит.  
Дело в следующем:
На простой форме класса TForm размещено 4 компонента класса TEdit
и один компонент класса TImage, для згрузки картинки в который,  
добавлен компонент TOpenPictureDialog.
В ходе работы пользователь заполняет строчки компонентов TEdit  
и используя диалог TOpenPictureDialog открывает картинку в TImage.
Затем при закрытии формы текстовые строки добавляются в списки,
строки которых сохраняются на диске в текстовых файлах. Адрес файла
картинки также сохраняется в списке. Фрагмент кода выглядит так:
...
procedure TForm3.Button1Click(Sender: TObject);
begin
 OpenPictureDialog1.InitialDir := 'D:\';
 OpenPictureDialog1.Execute;
 Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
procedure TForm3.Button2Click(Sender: TObject);
const
 path1 = '..\Ini1\ini1.txt';
begin
List1.Add(Edit1.Text);
List1.SaveToFile(path1);
Form1.ListBox1.Items:= List1;
...
 
В результате выясняется, что возможность сохранения списка, к которому
добавлена строка из Edit1 в файле напрямую зависит от диалога открытия
картинки. Поначалу после выбора файла картинки и загрузки её в
Image1.Picture дальнейшее нажатие кнопки Button2 приводило к
ошибке с сообщением "Can not creat file ....\Ini1\ini1.txt"  
При отключенном диалоге (//OpenPictureDialog1.Execute;) вся текстовая
информация из Edit1.Text  сохраняется в файл без проблем.
Диалог OpenPictureDialog каким то образом изменяет адреса файлов?
И сейчас, при наличии диалога картинки, программа работает лишь,
если выбрана картинка из директории, в которой расположены файлы
\Ini1\ini1.txt. Попытка открыть файл картинки с диска С:\ опять
приводит к ошибке. Может кто знает, как это вылечить?
C глубоким уважением ковсем жителям этого форума,
ваш Lightosaur

Всего записей: 9 | Зарегистр. 24-01-2006 | Отправлено: 17:31 04-02-2006
smus811

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vshersh, SERGE_BLIZNUK, спасибо! буду пробовать.  
 

Всего записей: 6 | Зарегистр. 29-01-2006 | Отправлено: 18:53 04-02-2006
LordMAD



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lightosaur
Все правильно так и должно быть. Используй в path1 абсолютный путь и почитай где-нибудь что означает ТУКУЩАЯ ПАПКА в Windows, чтобы такого больше не делал.

Всего записей: 378 | Зарегистр. 01-10-2002 | Отправлено: 20:27 04-02-2006
NightRider



местный бомж
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Lightosaur
полезная штука

----------
Набираю модераторов на сайт
Создание сайтов в Калининграде

Всего записей: 740 | Зарегистр. 16-01-2003 | Отправлено: 21:08 04-02-2006
SERGE_BLIZNUK

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lightosaur
1. очень рекомендую код:

Код:
OpenPictureDialog1.Execute;  
 Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);  

заменить на

Код:
 
    if OpenPictureDialog1.Execute then // execute file open dialog
      Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
 

 
2. Вам правильно ответили, что так, как вы поступаете с именем сохранениемого INI файла, так поступать НЕЛЬЗЯ. Вы задаёте относительный путь от текущей папки.
А она изменяется в OpenDialog.
По поводу решения - Вам надо отказываться от Вашей пагубной идеи сохранять файл в каталоге ini1 расположенном на один уровень выше от текущего (а текущий при запуске программы равен каталогу, где лежит запускаемый EXE файл). А если папки INI1 нет? А если вы запустите ваш EXE из корня диска?...
Я для решения рекомендую такое - сохранять в файл ini1.txt, расположенном в каталоге, откуда запущена программа:
 

Код:
 
  var
     MyIniFileName : string;
begin
 MyIniFileName := ExtractFilePath(ParamStr(0))+ 'ini1.txt';
...
 List1.SaveToFile(MyIniFileName);  
 

Заметьте, функция  ExtractFilePath описана в SysUtils, поэтому не забудьте добавить SysUtils в секцию uses
 
P.S. еще рекомендую почитать на будущее про конструкции try ... except,  try finally...
 
удачи.  
Если что-то не получается - спрашивайте.
 
 

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 10:00 05-02-2006 | Исправлено: SERGE_BLIZNUK, 10:07 05-02-2006
Lightosaur

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо Всем!
Есть же люди умней меня!  
Всех Вам благ!

Всего записей: 9 | Зарегистр. 24-01-2006 | Отправлено: 17:08 05-02-2006
Irogotoshi



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как менять яркость/контраст экрана???  глобально в системе
нашел процедуру DeviceIoControl с параметром IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS  
но как ей воспользоваться для этого ума не приложу
 
еще есть SetDeviceGammaRamp  но у него в параметре надо передавать массив - зачем массив то? что в нем должно быть?  в моем понимании одной переменой byte должно хватать
да и SetDeviceGammaRamp для гаммы а не для яркости/контраста
 
есть идеи?

Всего записей: 35 | Зарегистр. 01-12-2004 | Отправлено: 21:19 05-02-2006 | Исправлено: Irogotoshi, 21:25 05-02-2006
LePeR



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Люди добрые! подскажите как в Delphi осуществить проверку на наличие числа в real массиве. Вот это работает:
if not h in [1,2,3,4,5] then то-то то-то (h:integer)
а вот с числами типа real как?
Заранее спасибо!

Всего записей: 36 | Зарегистр. 26-09-2004 | Отправлено: 23:34 05-02-2006
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LePeR

Цитата:
Люди добрые! подскажите как в Delphi осуществить проверку на наличие числа в real массиве. Вот это работает:  
if not h in [1,2,3,4,5] then то-то то-то (h:integer)

читаем что есть такое вот это
Цитата:
[1,2,3,4,5]
и узнаем что это множество, далее узнаем какие типы данных могут входить в множество и оказывается что действительный туда нельзя, почему читаем в хелпе. Для чисел типа рил делается отдельная функция типа
function IsExists(a:real;b:myMas):boolean;
var
   i:integer;
begin
   Result:=False;
   for i:=Low(b) to High(b) do
      if a=b[i] then begin
        result:=True;
        exit;
       end;
 
незабудь описать тип массива зараннее.


----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 02:12 06-02-2006
Podoben_Bogu

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Я только начал изучать Delphi. При создании первых программ у меня возникло много вопросов. Возможно они слишком простые и кто-то из вас ответит мне за 5 минут, но мне чтобы на них ответить придётся часами рыться в справочниках. Итак вот мои вопросы:
Как поместить на форму рисунок в формате gif, jpg и др.?
Как сделать TLabel прозрачной?
Как сделать чтобы в TEdit не печатать больше двух символов после запятой?
Как пользоваться PageControl и делать многостраничные формы, можно ли несколько програм расположенных на разных формах обьединить в одну программу с несколькими страницами?
Как сделать градиентную заливку фона страницы и др. компонентов?
Как сделать кнопку обзор с загрузкой полного пути в TEdit
И ещё расскажите пожалуйста что это за KOL - кодоэкономичная объектная библиотека для Delphi и всё что известно о графике, 2d и 3d в Delphi

Всего записей: 21 | Зарегистр. 06-10-2005 | Отправлено: 07:30 06-02-2006
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Podoben_Bogu
Может быть тебе весь учебник Delphi здесь набрать?
Литературу читать надо.

----------
Хочешь всего и сразу, а получаешь ничего и постепенно.

Всего записей: 520 | Зарегистр. 13-10-2004 | Отправлено: 07:43 06-02-2006 | Исправлено: PowerChute, 07:44 06-02-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Irogotoshi
Посмотри описания фунций в MSDN
 

Цитата:
DeviceIoControl

http://msdn.microsoft.com/library/en-us/devio/base/deviceiocontrol.asp
 

Цитата:
SetDeviceGammaRamp

http://msdn.microsoft.com/library/en-us/icm/icm_0yi8.asp

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 09:39 06-02-2006
sea78



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2Podoben_Bogu
1)Как поместить на форму рисунок в формате gif, jpg и др.?  
2)Как сделать TLabel прозрачной?  
3)Как сделать чтобы в TEdit не печатать больше двух символов после запятой?  
4)Как пользоваться PageControl и делать многостраничные формы, можно ли несколько програм расположенных на разных формах обьединить в одну программу с несколькими страницами?  
5)Как сделать градиентную заливку фона страницы и др. компонентов?  
6)Как сделать кнопку обзор с загрузкой полного пути в TEdit  
 
1) Поставить набор компонетов RXLib там есть компонент, который позволяет бросать на форму любые рисунки
2) У этого компонета есть свойство Transparent ... поставь в True
3) Смотри свойство MaxLength
...  
 
Самое главное что ты должен сделать, это научится пользоваться Справочной системой.

Всего записей: 119 | Зарегистр. 24-01-2006 | Отправлено: 10:57 06-02-2006 | Исправлено: sea78, 10:58 06-02-2006
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
sea78

Цитата:
3)Как сделать чтобы в TEdit не печатать больше двух символов после запятой?  
3) Смотри свойство MaxLength

Ты путаешь максимальное количество введенных знаков и количество знаков после запятой. В этом случае нужно через KeyPress компоненты отслеживать.

Всего записей: 520 | Зарегистр. 13-10-2004 | Отправлено: 11:12 06-02-2006
EZH



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Как сделать чтобы в TEdit не печатать больше двух символов после запятой?

А не проще вместо TEdit использовать TMaskEdit?

Всего записей: 1738 | Зарегистр. 02-09-2004 | Отправлено: 11:23 06-02-2006 | Исправлено: EZH, 11:23 06-02-2006
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А не проще вместо TEdit использовать TMaskEdit?

Я вообще использую TRzNumericEdit и не грею голову по поводу проверок по количеству знаков после запятой.

----------
Хочешь всего и сразу, а получаешь ничего и постепенно.

Всего записей: 520 | Зарегистр. 13-10-2004 | Отправлено: 11:33 06-02-2006
BABAYKA



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Что-то я совсекм затупил......подскажите плиз....какими средствами можно в клиентком приложении (по нажатию на пимпу) задать путь к файлу БД (IB или FB) который находится на другой сетевой машине....%).....Заранее всем спасибо за помощь.....

Всего записей: 109 | Зарегистр. 09-10-2004 | Отправлено: 13:00 06-02-2006
SergeBS



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BABAYKA

Цитата:
 
 Нажимаю ран....
 

Ну нафига ран...? Просто в дизайн Active=true. И что за DBTables, DB? IB - сервер.  
Работаешь с IB - InterBase вкладка. Начни с IBTable+Datasource+DBGrid какой-либо таблицы. И со строки подключения. При ее создании есть чудная кнопка: проверить подключение. А еще утяни IBExpert - exUSSR = freeware. Он все потрошки IB покажет. Табличку сделаешь, в IBExpert в нее что-нито воткнешь, глядишь и заладится...
 
 
Добавлено:
BABAYKA
DelphiX\Demos\DB - куча примеров. В ADO - строка подключения (что тебе надо) - 1 строка кода вызывает диалог.

Всего записей: 272 | Зарегистр. 19-04-2005 | Отправлено: 13:08 06-02-2006
BABAYKA



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SergeBS

Цитата:
Ну нафига ран...? Просто в дизайн Active=true

Смысл в том , чтой бы проверить коннект к базе с главной формы, а не с дата мудаля....(задлбал он меня)...

Цитата:
А еще утяни IBExpert - exUSSR = freeware. Он все потрошки IB покажет. Табличку сделаешь, в IBExpert в нее что-нито воткнешь, глядишь и заладится...

да есть у меня таблички.....в IBConsole наклепал....работают.....
Мня щас более интересует связь с файлом базы данных с клиентского приложения...Как это заделать программно в клиенте, что бы можно было указывать сетевой путь где лежит база? Если можно немного поподробнее.....не силен я в дельфях....изучаю только....

Всего записей: 109 | Зарегистр. 09-10-2004 | Отправлено: 13:33 06-02-2006
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
BABAYKA

Цитата:
..Как это заделать программно в клиенте, что бы можно было указывать сетевой путь где лежит база?

В чем собсно проблема?
Не знаешь как сохранить строку в ини-файл, или как саму строку связи формировать?

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 13:40 06-02-2006
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru