| 
| 
 | Вопрос # 2 610/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!У меня к вам такой вопрос?
 Снизу написан код, где мне надо чтобы под каждой картинкой
 было текстовое описание, но почему-то везде загружается файл
 3.Txt, картинки грузятся разные а текстовый везде один и тот-же,
 что не так? Лучше бы и текстовый запихать в ресурс, но я не знаю
 что писать в ресурсе, и какую команду дать в TreeView.
 Помогите пожалуйста. Заранее благодарен.
 Приложение:Переключить в обычный режим var  Form1: TForm1;  Bm: TBitmap; implementation {$R *.dfm}{$R new.res}    procedure TForm1.TreeViewClick(Sender: TObject);begin   if TreeView.Selected.AbsoluteIndex = 0   then Bm := TBitmap.Create; Bm.LoadFromResourceName(HInstance, 'BITMAP1'); Form1.Canvas.Draw(448, 35, Bm); Memo1.Lines.LoadFromFile('1.Txt');   if TreeView.Selected.AbsoluteIndex = 1   then Bm.LoadFromResourceName(HInstance, 'BITMAP2'); Form1.Canvas.Draw(448, 35, Bm);    if TreeView.Selected.AbsoluteIndex = 2   then Bm.LoadFromResourceName(HInstance, 'BITMAP3'); Form1.Canvas.Draw(448, 35, Bm); 
|  |   Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)Вопрос отправлен: 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 (статус: 4-ый класс), 7 апреля 2009, 22:09 [#1]:ужс. а begin..end после then кто ставить будет? |  
|   | Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 8 апреля 2009, 11:33 [#2]:Да оно и Self в явном виде особо не нужно указывать. Canvas.Draw(... и все. |  
|   | min@y™ (статус: Доктор наук), 8 апреля 2009, 11:40 [#3]: Цитата: Да оно и Self в явном виде особо не нужно указывать. Canvas.Draw(... и все.
 
 
 Я в курсе. Указал, чтоб подчеркнуть отличие.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |