Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 610

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
У меня к вам такой вопрос?
Снизу написан код, где мне надо чтобы под каждой картинкой
было текстовое описание, но почему-то везде загружается файл
3.Txt, картинки грузятся разные а текстовый везде один и тот-же,
что не так? Лучше бы и текстовый запихать в ресурс, но я не знаю
что писать в ресурсе, и какую команду дать в TreeView.
Помогите пожалуйста. Заранее благодарен.

Приложение:
  1. var
  2. Form1: TForm1;
  3. Bm: TBitmap;
  4.  
  5. implementation
  6.  
  7. {$R *.dfm}
  8. {$R new.res}
  9.  
  10.  
  11. procedure TForm1.TreeViewClick(Sender: TObject);
  12. begin
  13. if TreeView.Selected.AbsoluteIndex = 0
  14. then
  15. Bm := TBitmap.Create;
  16. Bm.LoadFromResourceName(HInstance, 'BITMAP1');
  17. Form1.Canvas.Draw(448, 35, Bm);
  18. Memo1.Lines.LoadFromFile('1.Txt');
  19. if TreeView.Selected.AbsoluteIndex = 1
  20. then
  21. Bm.LoadFromResourceName(HInstance, 'BITMAP2');
  22. Form1.Canvas.Draw(448, 35, Bm);
  23.  
  24. if TreeView.Selected.AbsoluteIndex = 2
  25. then
  26. Bm.LoadFromResourceName(HInstance, 'BITMAP3');
  27. Form1.Canvas.Draw(448, 35, Bm);
  28.  


Толков Геннадий Викторович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 7 апреля 2009, 21:55
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Выучи сначала матчасть, а уж потом копай вглубь. Я немного подредактировал твою процедуру:

var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
{$R new.res}
 
 
procedure TForm1.TreeViewClick(Sender: TObject);
var
  Bm: TBitmap; // Используй локальные переменные
begin
   Bm := TBitmap.Create;
   try
     if TreeView.Selected.AbsoluteIndex = 0
       then begin // Операторные скобки для объединения нескольких операторов
                  // Именно поэтому картинки разные, а текст один и тот же (последний)
              Bm.LoadFromResourceName(HInstance, 'BITMAP1');
              Form1.Canvas.Draw(448, 35, Bm);
              Memo1.Lines.LoadFromFile('1.Txt');
            end;
 
     if TreeView.Selected.AbsoluteIndex = 1
       then begin // Операторные скобки для объединения нескольких операторов
              Bm.LoadFromResourceName(HInstance, 'BITMAP2');
              Form1.Canvas.Draw(448, 35, Bm);
              Memo2.Lines.LoadFromFile('2.Txt');
            end;
 
     if TreeView.Selected.AbsoluteIndex = 2
       then begin // Операторные скобки для объединения нескольких операторов
              Bm.LoadFromResourceName(HInstance, 'BITMAP3');
              Form1.Canvas.Draw(448, 35, Bm);
              Memo3.Lines.LoadFromFile('3.Txt');
            end;
  finally
    Bm.Free(); // Всегда освобождай память
  end;
end;

Потом пригляделся и ещё чуть-чуть обработал напильником:
procedure TForm1.TreeViewClick(Sender: TObject);
var
  Bm: TBitmap; // Используй локальные переменные
  Memo: TMemo;
  sIndex: string;
begin
  if not Assigned(TreeView.Selected) // Всегда проверяй существование объекта,
    then Exit; // иначе есть риск нарваться на EAccessViolation.
 
 
  sIndex:= IntToStr(TreeView.Selected.AbsoluteIndex + 1);
  Bm:= TBitmap.Create();
  try
    Bm.LoadFromResourceName(HInstance, 'BITMAP' + sIndex);
    {Form1}Self.Canvas.Draw(448, 35, Bm); // <--- Использование глобального указателя на класс (Form1)
                                          // в методе этого класса (TForm1) чревато проблемами.
    Memo:= TMemo(FindComponent('Memo' + sIndex));
    Memo.Lines.LoadFromFile(sIndex + '.txt');
  finally
    Bm.Free(); // Всегда освобождай память
  end;
end;

В ресурс можно запихать ЛЮБОЙ файл, а не только текстовый. Погугли по слову brcc32.exe.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 7 апреля 2009, 22:35
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 8 апреля 2009, 11:40; участников в обсуждении: 3.
Amidamaru

Amidamaru (статус: 4-ый класс), 7 апреля 2009, 22:09 [#1]:

ужс. а begin..end после then кто ставить будет?
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.
Косолапов Дмитрий Юрьевич

Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 8 апреля 2009, 11:33 [#2]:

Да оно и Self в явном виде особо не нужно указывать. Canvas.Draw(... и все.
min@y™

min@y™ (статус: Доктор наук), 8 апреля 2009, 11:40 [#3]:

Цитата:


Да оно и Self в явном виде особо не нужно указывать. Canvas.Draw(... и все.


Я в курсе. Указал, чтоб подчеркнуть отличие.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:00
Выполнено за 0.03 сек.