Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5

Замена форм

23.04.2014, 13:46. Показов 1964. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет
Создаю букварь. Возник вопрос, вот форма:

При нажатии на стрелку, происходит смена буквы. Сначала "А", потом "Б" и т.д. Чем можно заменить форму? Не буду же я создавать 33 формы?
Delphi
1
Image1.Click:=Form2.show;
ну это перебор...лично я хочу что то проще. Может есть какие нибудь варианты? Может какие нибудь компоненты помогут?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.04.2014, 13:46
Ответы с готовыми решениями:

Связывание двух форм по расположению на мониторе(Синхронизация форм)
Такая проблема, представим если 2 формы, на первой форме есть клавиша "На вторую форму", которая будет иметь код: ...

Замена форм в FastColoredTextBox
Здравствуйте, можно ли изменить формы поиска, замены и перехода к строке в FastColoredTextBox и как?

Объявление форм для доступа к ним из других форм проекта
Поскажите, пожалуйста, как правильно объявить форму, что бы доступ к её элементам можно было получать из других форм?

21
349 / 262 / 65
Регистрация: 07.04.2014
Сообщений: 1,603
23.04.2014, 13:48
При клике заменять изображение в Image1 и будет Вам счастье.
0
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5
23.04.2014, 14:34  [ТС]
Цитата Сообщение от Streletz Посмотреть сообщение
При клике заменять изображение в Image1 и будет Вам счастье.
мммм....да? А прокатит?
А как?
Delphi
1
Image1.Click:=Image1.Picture.LoadFromFile('1.jpg');
а при повторном нажимании опять этот код:
Delphi
1
Image1.Click:=Image1.Picture.LoadFromFile('1.jpg');
а нужно
Delphi
1
Image1.Click:=Image1.Picture.LoadFromFile('2.jpg');
может значение tag поменять?
0
349 / 262 / 65
Регистрация: 07.04.2014
Сообщений: 1,603
23.04.2014, 14:42
Формируйте нужные имена файлов динамически:
Delphi
1
2
3
4
5
6
7
8
9
var
a:integer=1;//глобальная переменная
....
begin
.....
Image1.Click:=Image2.Picture.LoadFromFile(IntToStr(a)+'.jpg');
inc(a);
.....
end
Надеюсь, что идея понятна.
может значение tag поменять?
Оно здесь не причём.
P.S. Прошу прощения. В предыдущем посте опечатка. Не Image1, a Image2.
0
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5
23.04.2014, 14:55  [ТС]
Streletz, неизвестно откуда программа будет брать картинки?
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;//глобальная переменная
begin
Image1.Picture.LoadFromFile(IntToStr(a)+'.jpg');
inc(a);
end;
где и как указать путь к файлам
0
349 / 262 / 65
Регистрация: 07.04.2014
Сообщений: 1,603
23.04.2014, 15:09
где и как указать путь к файлам
В параметре метода LoadFormFile. Вы же сами это делали несколькими постами выше. Другое дело, что Вы делали это статически, а для реализации данной задачи нужно это делать программно (динамически).
При a=1 это
Delphi
1
Image2.Picture.LoadFromFile(IntToStr(a)+'.jpg');
даст тот же результат, что и это
Delphi
1
Image2.Picture.LoadFromFile('1.jpg');
Этот код
Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer;//глобальная переменная
begin
Image1.Picture.LoadFromFile(IntToStr(a)+'.jpg');
inc(a);
end;
к сожалению, работать не будет.
Потому, что
  1. Переменная "a" объявлена локально (внутри процедуры обработчика).
  2. Переменная "a" не инициализирована. Поэтому, вместо нужного числа при 1м обращении в ней будет так называемый "мусор". То есть, всё что угодно, только не это число.
Исправленный вариант процедуры обработчика:
Delphi
1
2
3
4
5
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.LoadFromFile(IntToStr(a)+'.jpg');
inc(a);
end;
Глобальное объявление переменных осуществляется в разделе var модуля.
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
23.04.2014, 15:13
Цитата Сообщение от Vedma Посмотреть сообщение
где и как указать путь к файлам
заведи глобальную переменную типа string. при тарте формы можно так
Delphi
1
Path:= ExtractFilePath(ParamStr(0));
в переменную заносится путь к папке, в которой ледит программа. думаю, понятно, что в нее можно заносить любой необходимый тебе путь

Добавлено через 1 минуту
Например
Delphi
1
2
3
4
5
6
7
8
9
10
implementation
 
var
  path: string;
 
.....
// старт фотмы
begin
  path:= ExtractFilePath(ParamStr(0)) + 'images\';
end;
Добавлено через 2 минуты
Delphi
1
LoadFromFile(path + 'имя картинки, которое формируется динамически');
0
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5
23.04.2014, 15:20  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var
  Form1: TForm1;
  path: string;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.LoadFromFile(path + 'имя картинки, которое формируется динамически');
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
path:= ExtractFilePath(ParamStr(0)) + 'images\';
end;
 
end.
запуталась
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
23.04.2014, 15:25
Цитата Сообщение от Vedma Посмотреть сообщение
запуталась
сейчас покажу...
0
349 / 262 / 65
Регистрация: 07.04.2014
Сообщений: 1,603
23.04.2014, 15:27
Попробуйте так
Delphi
1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
path:= ExtractFilePath(Application.ExeName) + 'images\';
end;
0
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5
23.04.2014, 15:40  [ТС]
DenNik,
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
23.04.2014, 15:50
Лучший ответ Сообщение было отмечено Vedma как решение

Решение

в качестве примера
Вложения
Тип файла: zip Букварь.zip (579.5 Кб, 7 просмотров)
1
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
23.04.2014, 15:52
что неясно, спрашивай
0
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5
24.04.2014, 13:16  [ТС]
DenNik, спасибо большое Все, теперь поняла...ваш пример очень кстати - все доходчиво объясняет=))))

Добавлено через 21 час 18 минут
DenNik, привет
Возник вопрос: есть label1, где при нажатии кнопки появляются буквы. Добавила еще один Label2, где по идее появляется название картинки...
Пример: A - Апельсин, Б - Банка итд
0
30 / 21 / 14
Регистрация: 13.05.2012
Сообщений: 161
24.04.2014, 13:50
Создаете глобальный массив, в него вбиваете названия картинок.
И по такой же схеме:

Pascal
1
2
3
Names:array[1..N] of string = ('Апельсин','Банка','Вода');
 
label2.Caption:= Names[i];
0
Охотница на ведьм
 Аватар для Vedma
313 / 97 / 8
Регистрация: 26.11.2011
Сообщений: 2,784
Записей в блоге: 5
24.04.2014, 13:58  [ТС]
Чиполлино, а если такая ситуация: программа показывает Апельсин, а на лейбле Банка
0
30 / 21 / 14
Регистрация: 13.05.2012
Сообщений: 161
24.04.2014, 14:04
Лучший ответ Сообщение было отмечено Vedma как решение

Решение

(Ссылка на сторонний ресурс удалена)
 Комментарий модератора 
Ссылки на сторонние ресурсы запрещены. Всё выкладывайте на форум.

Добавил имена: Букварь.rar

Добавлено через 1 минуту
Vedma, значит смещение, как я понимаю, Вы начали с 1, а нужно начинать с 0.
Т.е. первый элемент массива Names[0]
1
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
24.04.2014, 16:18
Цитата Сообщение от Чиполлино Посмотреть сообщение
Names:array[1..N] of string
Цитата Сообщение от Чиполлино Посмотреть сообщение
Т.е. первый элемент массива Names[0]
первый элемент массива - 1. сам же написал
0
Житель Земли
 Аватар для DenNik
3004 / 3026 / 390
Регистрация: 26.07.2011
Сообщений: 11,465
Записей в блоге: 1
24.04.2014, 16:26
Vedma, внеси изменения в программу, которую я тебе скинул
Delphi
1
2
3
4
5
6
7
const
  N = 33;
  a: array[1..N] of Char = ('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т',
                             'У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');
  // ЗДЕСЬ
  names: array[1..N] of string = ('Апельсин','Банка','Вода','Гвоздь','Доска','Е','Ё','Ж','З','И','Й','К','Л',
                                  'М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.ShowPicture;
var
  FN: string;
begin
  Label1.Caption:= a[L];
  Label2.Caption:= names[L];        // ЗДЕСЬ
  FN:= path + a[L] + '.jpg';
  if FileExists(FN) then Image1.Picture.LoadFromFile(FN) else Image1.Picture:= nil;
end;
Миниатюры
Замена форм  
0
30 / 21 / 14
Регистрация: 13.05.2012
Сообщений: 161
24.04.2014, 17:05
Цитата Сообщение от DenNik Посмотреть сообщение
первый элемент массива - 1. сам же написал
У меня с единицы, я ничего и не говорю, я уже после сообщения скинул свой вариант.

Добавлено через 1 минуту
Цитата Сообщение от DenNik Посмотреть сообщение
Label2.Caption:= names[L];
Так у меня и написано

Pascal
1
Label2.Caption:= Names[L];
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.04.2014, 17:05
Помогаю со студенческими работами здесь

Как по закрытию форм 2 сделать определенное действие в форм 1?
Здравствуйте! Помогите пожалуйста, я новичок в ) Столкнулся с проблемой и не смог найти ответа на форумах. В кратце- есть 2 формы....

Открытие форм из под форм
три формы - основная первая вторая и третья. в первой #include "vtoraya.h" дальше: public: vtoraya ^ pimpis; и дальше действие...

Передать из форм 1, в форм 3.
я перелазил весь форум но так и непонял как передать инфу с textbox3 в textbox1. (из 3 формы в 1) розъясните,

Замена проца и охлаждение к нему,прибавка к оперативке,нужна ли замена HDD?
1.Здравствуйте, мне нужен совет по поводу замены процессора с DualCore AMD Athlon 5000, 2200 MHz (11 x 200) на оптимальный вариант но под...

Поиск и замена с пропуском первой замены. Замена начиная со второго значения
Добрый день. Я прогнал mysql базу такой заменой. UPDATE post SET pagetext = CONCAT (substring(pagetext, 1,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru