Переприсваивание картинок в Bitbtn

Тема в разделе "Delphi - Компоненты", создана пользователем nattaella, 9 июн 2011.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. nattaella

    nattaella Гость

    У меня есть массив ArBB[0..3] - массив типа TBitBtn, в котором есть 4 кнопки BitBtn. Одни из этих кнопок имеют картинки, другие не имеют, то есть у них свойство Glyph=nil;
    Сами элементы массива располагаются вертикально, т.е. так:
    bitbtn1
    bitbtn2
    bitbtn3
    bitbtn4
    Мне нужно сделать так, что если кнопка не имеет картинки, то она получает картинку вышележащего квадрата, а тот квадрат получает картинку ещё вышележащего квадрата и так далее. Выходит, что если есть «пустота» на месте картинки , то её заполняют вышележащие квадраты, то есть «падают».
    Вот эта процедура:
    Код (Text):
    procedure TForm1.BitBtn25Click(Sender: TObject);
    var i1,p,k:integer;
    begin
    for i:=3 downto 0 do begin
    if ArBB[i].Glyph=nil then
    begin
    for i1:=i-1 downto 0 do
    p:=ArBB[i1].Glyph.Width;
    for k:=0 to 6 do
    if ArWidth[k]=p then Case_(ArBB[i1+1],k);  
    end;
    end;
    end;
    Насчёт Case_: эта процедура в кнопку bb загружает рисунок под «номером» m.
    Код (Text):
    procedure TForm1.Case_(bb:TBitBtn; m:integer);
    begin
    case m of
    0: bb.Glyph.LoadFromFile('zvonok.bmp');
    1: bb.Glyph.LoadFromFile('banan.bmp');
    2: bb.Glyph.LoadFromFile('grusha.bmp');
    3: bb.Glyph.LoadFromFile('sliva.bmp');
    4: bb.Glyph.LoadFromFile('jagoda.bmp');
    5: bb.Glyph.LoadFromFile('dgekpot.bmp');
    6: bb.Glyph.LoadFromFile('sim.bmp');
    end;
    end;
    ArWidth – это массив с ширинами картинок. Каждая из 7 картинок имеет свою ширину – от 45 до 51. Я таким образом их отличаю.
    ArWidth: array [0..6] of integer = (50,51,49,48,47,45,46);
    где 50 –это ширина 'zvonok.bmp'….. 46 – это ширина 'sim.bmp'.

    Почему при нажатии на BitBtn25 ничего не происходит?
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Можете выложить весь проэкт архивом?
     
  3. nattaella

    nattaella Гость

    Я просто выбрала лишь кусочек из всего проэкта, потому что я пишу игру. Но я оформлю в виде проэкта то, что меня интересует и скоро вышлю вложение
     
  4. nayke

    nayke Well-Known Member

    Регистрация:
    4 авг 2010
    Сообщения:
    310
    Симпатии:
    0
    Может сформулируете задачу вобщем и мы подскажем более оптимальное решение, отслеживание картинки на кнопке помоему не лучший вариант.
     
  5. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Главная ошибка тут: Case_(ArBB[i1+1],k);
    Вы передаёте в процедуру не ту кнопку которая на форме, а та которая в масиве.
    ArBB[] - это масив который содержит кнопки.
    когда вы пишете ArBB[0]:=bitbtn1;
    Вы заносите иформацию о bitbtn1 в масив ArBB[], и когда обращаетесь к елементу масиву ArBB то получаете элемент с такимиже свойствами, но этот елемент не будет той кнопкой что на экране.
    Вообшем выше написан бред, а ниже нормальным языком
    К примеру:
    Код (Text):
    var a,b:array[1..2] of integer;
    begin
    a[1]:=5;
    a[2]:=7;
    b[1]:=a[1];
    b[2]:=a[2];
    b[1]:=3;
    b[2]:=4;
    //в результате
    //a[1]=5
    //a[2]=7
    //b[1]=3
    //b[2]=4
    //а не
    //a[1]=3
    //a[2]=4
    //b[1]=3
    //b[2]=4
    end;
    если вы хотите обращатся к кнопкам на форме через отдельный масив, используйте масив указателей.
     

    Вложения:

    • Project1.zip
      Размер файла:
      18,8 КБ
      Просмотров:
      6
  6. nattaella

    nattaella Гость

    спс :rolleyes: всё получилось!)
     
  7. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Это радует... :)
    Мне вот только непонятна эта заморочку с ArWidth массив фейсконтроль... :)
    И... почему бы вместо массивов не использовать списки?
    Вот посмотрите (в прикрепленном файле)... я гдето так... приблизительно это вижу...
    Может и Вам подойдет... :)
     

    Вложения:

    • ButtonRain.rar
      Размер файла:
      230,1 КБ
      Просмотров:
      5
  8. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    А в идеале лучше ,как по мне, создать масив TBitBtn с Parent=Form1 вручную вбить все свойства через цикл, и не парится.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей