|
Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|