|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Отображение jpg картинок в программе на delphi
Получил задание и часть его такая:
1. У нас есть база в Aсcess. Она хранит какую то инфу и адрес к папке с картинками(абсолютный или относительный). 2. У нас есть программа на Delphi При запуске мы подключаем базу через ADO, к примеру. Начинаем просматривать базу. Видим какую то инфу и картинку соответствующую данной записи в базе. Мы можем заменить картинку и при этом в базу записывается новый адрес новой картинки. Вопрос - как это можно сделать??? Идей нет. Жду комментариев и советов... - как делать или где и что читать??? Оч надеюсь на помощь.... |
#2
|
||||
|
||||
Вот смотрите, маленький вариант:
В примере используется Таблица Sample (id:Autonumber,Context:Text;Picture:Text) Код:
unit Unit11; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, DB, ADODB, ExtDlgs, StdCtrls, JPEG, Mask; type TForm11 = class(TForm) Image1: TImage; ADOConnection1: TADOConnection; ADOTable1: TADOTable; DataSource1: TDataSource; DBNavigator1: TDBNavigator; DBEdit1: TDBEdit; DBMemo1: TDBMemo; Button1: TButton; OpenPictureDialog1: TOpenPictureDialog; procedure ADOTable1AfterScroll(DataSet: TDataSet); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form11: TForm11; implementation {$R *.dfm} procedure TForm11.ADOTable1AfterScroll(DataSet: TDataSet); begin if not ADOTable1.FieldByName('Picture').IsNull then Image1.Picture.LoadFromFile(ADOTable1.FieldValues['Picture']); end; procedure TForm11.Button1Click(Sender: TObject); begin OpenPictureDialog1.FileName := VarToStr(DBEdit1.Field.Value); if not OpenPictureDialog1.Execute then Exit; DBEdit1.Field.Value := OpenPictureDialog1.FileName; end; end. Код:
object Form11: TForm11 Left = 0 Top = 0 Caption = 'Form11' ClientHeight = 161 ClientWidth = 370 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Image1: TImage Left = 254 Top = 8 Width = 107 Height = 113 Center = True Proportional = True Stretch = True end object DBNavigator1: TDBNavigator Left = 8 Top = 127 Width = 240 Height = 25 DataSource = DataSource1 TabOrder = 0 end object DBEdit1: TDBEdit Left = 8 Top = 8 Width = 212 Height = 21 DataField = 'Picture' DataSource = DataSource1 TabOrder = 1 end object DBMemo1: TDBMemo Left = 8 Top = 32 Width = 240 Height = 89 DataField = 'Context' DataSource = DataSource1 TabOrder = 2 end object Button1: TButton Left = 223 Top = 8 Width = 25 Height = 21 Caption = '...' TabOrder = 3 OnClick = Button1Click end object ADOConnection1: TADOConnection ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\'#1061#1086#1079#1103#1080#1085'\Doc' + 'uments\Demo.mdb;Persist Security Info=False;' LoginPrompt = False Mode = cmShareDenyNone Provider = 'Microsoft.Jet.OLEDB.4.0' Left = 96 Top = 56 end object ADOTable1: TADOTable Connection = ADOConnection1 CursorType = ctStatic AfterScroll = ADOTable1AfterScroll TableName = 'Sample' Left = 128 Top = 56 end object DataSource1: TDataSource DataSet = ADOTable1 Left = 160 Top = 56 end object OpenPictureDialog1: TOpenPictureDialog Left = 192 Top = 56 end end Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Огромное спасибо.
Сейчас буду думать - как запустить. Так все куда надо скопировал. F9 скомпилировалось. Базу в Аксесс - набросал. Нажимаю - открыть файл - сбрасывает с ошибкой. У меня 7 Делфи, исходный текст на какой??? |
#4
|
||||
|
||||
D2009, но код несложный проблем вроде недолжно быть.
Вы Dfm-файл сделали? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Да, dfm и pas файлы....
Открыл новый проект и изменил dfm и pas файлы.... потом сохранил.... Там сначала конфликт имен был, но я это подправил.... Unit11 на Unit1.... |
#6
|
|||
|
|||
Да, dfm и pas файлы....
Открыл новый проект и изменил dfm и pas файлы.... потом сохранил.... Там сначала конфликт имен был, но я это подправил.... Unit11 на Unit1.... Ошибка Access violation at address 004ae9d2 in module Project1.exe. Read of address 00000000 |
#7
|
|||
|
|||
Не создан какой-то объект, к которому происходит обращение.
Запусти в отладчике и скажи на какой строчке это происходит. |
#8
|
||||
|
||||
Вы бы лучше наоборот, сначала сделали unit11, открыли его, а потом уже переименовывали, а сейчас может и вылазят эти конфликты. Я только-что в D7 проверил - все работает. Деле так:
Создал проект, перешед к коду программы, заменил код программы на первую половину из примера. Переключился в дизайн формы, нажал Ctrl+F12 и заменил код формы на вторую половину из примера. Преключаемся обратно Ctrl+F12. Все элементе на форме отрисоавываются. Сохраняем юнит под именем Unit11. Открываем файл проекта, Project\View source и правим имена форм и юнитов. Все. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 06.04.2009 в 09:30. |
#9
|
|||
|
|||
OpenPictureDialog1.FileName := VarToStr(DBEdit1.Field.Value);
Вот на эту строку ругается в Unit1... |
#10
|
||||
|
||||
Ругается, потому-что вы неактивировали Базу и таблицу в дизайнере. По уму, надо бы конечно это делать при старте программы.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
|||
|
|||
ааа, сейчас посмотрю, попробую....
спасибки.... |
#12
|
|||
|
|||
Ага, ВСЁ РАБОТАЕТ!!!!
Урааа!!! Большое СПАСИБО!!!! Сча разберусь, как делать... |