-
имеется набор timage-й типа array[1..50] of timage. возникает необходимость вставки timage в промежутки. как сделать сдвиг этих timage на единицу. что-то вроде for i:= position to countimage do arr[i+1]:= arr[i] а затем в arr[position] добавляется новый timage
-
а если быть верным то for i:= countimage+1 downto position do arr[i] := arr[i-1];
-
а ты сделай свой массив динамическим. Объяви его как array of timage, затем с помощью функции setlength() регулируй длину своего массива.
-
нет необходимости регулировать длину самого массива, вопрос в другом заключался.
-
А по-моему всё-таки так:
setlength(arr,length(images)+1); for i:= high(arr) downto position+1 do //массив с нуля arr[i] := arr[i-1]; arr[position]:=newitem;
Если это не подходит, то опиши поподробнее, что тебе надо.
-
я обрабатываю событие Edit1.OnKeyPress(var Key: Char)
case key of 'А'..'Я' : begin inc(countimage); arr[countimage]:= TImage.Create(nil); arr[countimage].Picture.LoadFromFile(<путь к файлу>+ Key+'.bmp'); image1.Canvas.Draw(countimage * width, 0, Arr [countimage].Picture.Bitmap.Graphic); end; end; {case}
В общем все это отлично работает в случае, если символы добавляются в конце. А когда символы добавляются посреди строки (в любом месте), необходимо также их вставить и в массив и вывести на image1.canvas, а для этого необходимо совершить сдвиг вправо на один элемент. как в даном случае массив обработать? организовать цикл не проблема, проблема в переприсваивании следующему элементу массива значения предыдущего.
-
Все проблема решена...
for i := countimage downto pos+1+1 do begin
Arr.symbol[i]:= Timage.Create(nil);
Arr.symbol[i].Width:= Arr.symbol[i-1].Picture.Bitmap.Width;
Arr.symbol[i].Canvas.Draw(0,0, Arr.symbol[i-1].Picture.Graphic);
end;
в принципе без разницы что использовать: Draw или Bitblt. Рисует одинаково. Вопрос можно считать решенным!
-
забыл сказать countimage - это количество картинок, которые уже отрисовали; pos - Edit1.SelStart;
|