В данной программе используется 20 линий memo, в пример описания приведена всего одна линия.
В общем получается так: к каждой букве на определенной линии привязана буква, к каждой из букв привязана картинка, и так компонентов image составляет в количестве 680.
За большое время смог привязать всего лишь 2 линии.
Задача в том, как усложнить или упростить код, но при этом, много кратно сократить время на его написание.
Буду при много благодарен.
Код Delphi
if Memo1.lines[0]='а' then image1.visible:=true
else image1.visible:=false;
if Memo1.lines[0]='б' then image2.visible:=true
else image2.visible:=false;
if Memo1.lines[0]='в' then image3.visible:=true
else image3.visible:=false;
if Memo1.lines[0]='г' then image4.visible:=true
else image4.visible:=false;
if Memo1.lines[0]='д' then image5.visible:=true
else image5.visible:=false;
if Memo1.lines[0]='е' then image6.visible:=true
else image6.visible:=false;
if Memo1.lines[0]='ё' then image7.visible:=true
else image7.visible:=false;
if Memo1.lines[0]='ж' then image8.visible:=true
else image8.visible:=false;
if Memo1.lines[0]='з' then image9.visible:=true
else image9.visible:=false;
if Memo1.lines[0]='и' then image10.visible:=true
else image10.visible:=false;
if Memo1.lines[0]='ё' then image11.visible:=true
else image11.visible:=false;
if Memo1.lines[0]='к' then image12.visible:=true
else image12.visible:=false;
if Memo1.lines[0]='л' then image13.visible:=true
else image13.visible:=false;
if Memo1.lines[0]='м' then image14.visible:=true
else image14.visible:=false;
if Memo1.lines[0]='н' then image15.visible:=true
else image15.visible:=false;
if Memo1.lines[0]='о' then image16.visible:=true
else image16.visible:=false;
if Memo1.lines[0]='п' then image17.visible:=true
else image17.visible:=false;
if Memo1.lines[0]='р' then image18.visible:=true
else image18.visible:=false;
if Memo1.lines[0]='с' then image19.visible:=true
else image19.visible:=false;
if Memo1.lines[0]='т' then image20.visible:=true
else image20.visible:=false;
if Memo1.lines[0]='у' then image21.visible:=true
else image21.visible:=false;
if Memo1.lines[0]='ф' then image22.visible:=true
else image22.visible:=false;
if Memo1.lines[0]='х' then image23.visible:=true
else image23.visible:=false;
if Memo1.lines[0]='ц' then image24.visible:=true
else image24.visible:=false;
if Memo1.lines[0]='ч' then image25.visible:=true
else image25.visible:=false;
if Memo1.lines[0]='ш' then image26.visible:=true
else image26.visible:=false;
if Memo1.lines[0]='щ' then image27.visible:=true
else image27.visible:=false;
if Memo1.lines[0]='ъ' then image28.visible:=true
else image28.visible:=false;
if Memo1.lines[0]='ы' then image29.visible:=true
else image29.visible:=false;
if Memo1.lines[0]='ь' then image30.visible:=true
else image30.visible:=false;
if Memo1.lines[0]='э' then image31.visible:=true
else image31.visible:=false;
if Memo1.lines[0]='ю' then image32.visible:=true
else image32.visible:=false;
if Memo1.lines[0]='я' then image33.visible:=true
else image33.visible:=false;
if Memo1.lines[0]=' ' then image34.visible:=true
else image34.visible:=false;
Другие языки программирования и технологии
Помогите упростить код на делфи.
var
Form1: TForm1;
img:array[1..680] of TImage;
str: array[1..680] of char;
...
for k:=1 to 680 do img[k].Create();
...
for k:=1 to 680 do if Memo1.lines[0]=str[k] then image[k].visible:=true else image[k].visible:=false;
...В общих чертах, где-то так
Form1: TForm1;
img:array[1..680] of TImage;
str: array[1..680] of char;
...
for k:=1 to 680 do img[k].Create();
...
for k:=1 to 680 do if Memo1.lines[0]=str[k] then image[k].visible:=true else image[k].visible:=false;
...В общих чертах, где-то так
Во-первых: можно в данном коде убрать все if … then … else, заменив на
image1.visible := Memo1.lines[0]='а';
image2.visible := Memo1.lines[0]='б';
…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-вторых: не вдаваясь в обходы элементов формы, можно просто все картинки запихать в массив где-нибудь в момент инициализации программы:
var A : array [1..34] of tImage;
…
A[1] := Image1; A[2] := Image2; … A[34] := Image3;
И тогда изменение видимости можно будет производить в цикле. К примеру:
const С = 'абвгде… эюя' + #32;
…
for i := 1 to 34 do A[i].Visible := Ch = C[i];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ну и в-третьих: Если все эти картинки одинаковые по размеру и лежат просто друг на друге, то не проще ли загнать их в одну как последовательность кадров, загрузить в память и затем просто отображать на картинке на форме:
BMP := tBitmap.Create;
BMP.LoadFromFile('рисунок. bmp');
X := Pos(Ch, C);
Rect := Bounds(X*kadrWidth, 0, kadrWidth, kadrHeight);
Image1.Canvas.CopyRect(Image1.ClientRect, BMP, Rect);
image1.visible := Memo1.lines[0]='а';
image2.visible := Memo1.lines[0]='б';
…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-вторых: не вдаваясь в обходы элементов формы, можно просто все картинки запихать в массив где-нибудь в момент инициализации программы:
var A : array [1..34] of tImage;
…
A[1] := Image1; A[2] := Image2; … A[34] := Image3;
И тогда изменение видимости можно будет производить в цикле. К примеру:
const С = 'абвгде… эюя' + #32;
…
for i := 1 to 34 do A[i].Visible := Ch = C[i];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ну и в-третьих: Если все эти картинки одинаковые по размеру и лежат просто друг на друге, то не проще ли загнать их в одну как последовательность кадров, загрузить в память и затем просто отображать на картинке на форме:
BMP := tBitmap.Create;
BMP.LoadFromFile('рисунок. bmp');
X := Pos(Ch, C);
Rect := Bounds(X*kadrWidth, 0, kadrWidth, kadrHeight);
Image1.Canvas.CopyRect(Image1.ClientRect, BMP, Rect);
Читай динамическое создание объекта
На форме при запуске создаешь массив объектов image[1..34,1...60]
А то что ты написал меняется на
for j:=1 to 34 do image[j,i].visible:=false
p=pos('абвгд.... юя ', Memo1.lines[i])
if pos!=0 then image[pos,i].visible:=true
На форме при запуске создаешь массив объектов image[1..34,1...60]
А то что ты написал меняется на
for j:=1 to 34 do image[j,i].visible:=false
p=pos('абвгд.... юя ', Memo1.lines[i])
if pos!=0 then image[pos,i].visible:=true
switch - case.
да ну нахер! 680 image!? ты серьезно!?
напиши лучше условие задачи... ну или на почту скинь...
напиши лучше условие задачи... ну или на почту скинь...
Похожие вопросы
- Помогите упростить код java
- Какой язык даст большее быстродействие готового кода С++,Делфи, Ассемлер, в таком куске кода (внутри)?
- простейший код в Делфи: проверка строки на корректность символов
- Написал небольшой код на делфи. Почему не работает?
- помогите решить задачи на делфи!!!!ОЧЕНЬ СРОЧНО И ОЧЕНЬ НАДО!!!!
- Помогите исправить код чтобы он считал балы теста Pascal
- Всем привет, помогите в коде разобраться С++, вылетает ошибка, вроде все правильно..
- Помогите, лёгкий код C++
- Помогите с кодом на c++
- Помогите откорректировать код в C++