Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2009, 20:21   #1
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
Вопрос Нотный стан

Доброго времени суток! Возникла проблемма,нужно сделать нотный
стан на котором будут появляться ноты.На грифе гитары после каждого правильного нажатия на струну и лад соответсвующую этой ноте
при правильном ответе будет появляться новая нота.За раннее спасибо за помощь!
Alexsandr вне форума Ответить с цитированием
Старый 12.08.2009, 20:24   #2
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Ну дык элементарно. (с)
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 12.08.2009, 20:31   #3
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
По умолчанию

а как именно это сделать?
если можно по шагово.
Alexsandr вне форума Ответить с цитированием
Старый 12.08.2009, 20:35   #4
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Вам нужна картинка нотного стана и картинка ноты.
Отрисовываете стан, а сверху ноту.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 13.08.2009, 08:35   #5
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
По умолчанию

А как ноту прорисовывать по кооординатам или как?
Alexsandr вне форума Ответить с цитированием
Старый 13.08.2009, 08:48   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Да по координатам, берете канву (например формы) и периодически обновляете изображение. Точно не знаю (я не музыкант), но кажись ноты располагаются фиксированным образом. Значит можно организовать например массив, где каждый элемент есть нота (не знаю как с аккордами). Елемент =0 ? Тогда ничего рисовать не надо, 1 - значит до, 2 - ре и так далее. Тыкнули мышой на канве - получили координаты, по ним определили элемент массива - то есть та нота, которую нужно редактировать или воспроизвести (или чего Вы там хотите).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.08.2009, 18:04   #7
Alexsandr
Пользователь
 
Аватар для Alexsandr
 
Регистрация: 30.09.2007
Сообщений: 70
По умолчанию

а как организовать массив? Мне нужно,чтобы при нажатии на определёную координату grif : Bitmap происходило сопастовление этой координаты с координатой ноты на Stan2 : Bitmap,и при соответствии
выскакивло окно с надписью правильно.после закрытия нота на Stan2 : Bitmap; меняла координаты.

мой код
Код:
unit WinForm1;

interface

uses
  System.Drawing, System.Collections, System.ComponentModel,
  System.Windows.Forms, System.Data;

type
  TWinForm1 = class(System.Windows.Forms.Form)
  {$REGION 'Designer Managed Code'}
  strict private
    /// <summary>
    /// Required designer variable.
    /// </summary>
    Components: System.ComponentModel.Container;
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    procedure InitializeComponent;
    procedure TWinForm1_Load(sender: System.Object; e: System.EventArgs);
    procedure TWinForm1_Paint(sender: System.Object; e: System.Windows.Forms.PaintEventArgs);
  {$ENDREGION}
  strict protected
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    procedure Dispose(Disposing: Boolean); override;
  private
    { Private Declarations }
  public
    constructor Create;
  end;

  [assembly: RuntimeRequiredAttribute(TypeOf(TWinForm1))]

implementation
var
Stan2 : Bitmap;
note : Bitmap;
grif : Bitmap;

{$REGION 'Windows Form Designer generated code'}
/// <summary>
/// Required method for Designer support -- do not modify
/// the contents of this method with the code editor.
/// </summary>
procedure TWinForm1.InitializeComponent;
begin
  //
  // TWinForm1
  // 
  Self.AutoScaleBaseSize := System.Drawing.Size.Create(5, 13);
  Self.BackColor := System.Drawing.SystemColors.ControlLightLight;
  Self.ClientSize := System.Drawing.Size.Create(880, 471);
  Self.Name := 'TWinForm1';
  Self.Text := 'WinForm1';
  Include(Self.Load, Self.TWinForm1_Load);
  Include(Self.Paint, Self.TWinForm1_Paint);
end;
{$ENDREGION}

procedure TWinForm1.Dispose(Disposing: Boolean);
begin
  if Disposing then
  begin
    if Components <> nil then
      Components.Dispose();
  end;
  inherited Dispose(Disposing);
end;

constructor TWinForm1.Create;
begin
  inherited Create;
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent;
  //
  // TODO: Add any constructor code after InitializeComponent call
  //
end;

procedure TWinForm1.TWinForm1_Paint(sender: System.Object; e: System.Windows.Forms.PaintEventArgs);
var
  p : Point;

begin
 try
  e.Graphics.DrawImage(stan2,0,0);
 p.X := 100; p.Y := 50;
 e.Graphics.DrawImage(note,130,106);
 p.X := 100; p.Y := 50;
 e.Graphics.DrawImage(grif,120,300);
 p.X := 100; p.Y := 50;


  except
end;
 end;
procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.EventArgs);
begin
  try
  Stan2 := Bitmap.Create('C:\Documents and Settings\Alexsey\Рабочий стол\Прога ноты\image\Stan2.bmp');

  note := Bitmap.Create('C:\Documents and Settings\Alexsey\Рабочий стол\Прога ноты\image\note.bmp');
   note.MakeTransparent;

   grif := Bitmap.Create('C:\Documents and Settings\Alexsey\Рабочий стол\Прога ноты\image\grif.bmp');

  except
end;
end;

end.
From Stilet: А что если код твой то оформлять не надо?

Последний раз редактировалось Stilet; 14.08.2009 в 08:20.
Alexsandr вне форума Ответить с цитированием
Старый 14.08.2009, 07:53   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Я не разбирал Ваш код. Вот пример, Вы нарисовали изображение гриф. Оно заранее известно? Значит к нему уже можно определить массив. Ну например 4х10 (это не принципиально), заполняете его представлениями Ваших нот (я уже писал об этом). Зная размер изображения Вашего грифа и зная координаты мыши на изображении не трудно определить элемент массива (учитывая, что все элементы массива имеют фиксированный размер). Таким образом Вы получаете не сам рисунок ноты (участка изображения грифа), а его внутренне представление. Вам не нужно второе изображение, его роль выполняет массив с нотами. А нарисовать по массиву сможете сами (если Вам это необходимо).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц