Помощь - Поиск - Пользователи - Календарь
Полная версия: Создание кнопки + меню
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Yavrik
Всем привет!
Можете написать пожалуйста пример кнопки, что-бы когда нажать на неё вылезло меню.
Зарание спасибо! smile.gif
RathaR
Цитата(Yavrik @ 30.10.2009 15:09) *

Можете написать пожалуйста пример кнопки, что-бы когда нажать на неё вылезло меню.

Ты об F10?
А вообще - смотри
Yavrik
Нет...
Написать кнопку, и когда жать на неё что-бы вылезло меню.
У меня есть модуль для работы с мышкой, мне нужно написать кнопку. Когда нажать на неё что-бы вылезло меню.
RathaR
Цитата(Yavrik @ 30.10.2009 16:04) *

Нет...
Написать кнопку, и когда жать на неё что-бы вылезло меню.
У меня есть модуль для работы с мышкой, мне нужно написать кнопку. Когда нажать на неё что-бы вылезло меню.

А причем тут тогда теория паскаля? Явно розделом промазал...
Yavrik
Извните что промазал smile.gif

мне нужно на паскале эту кнопку написать
volvo
В поиске был? Я лично как минимум два варианта выкладывал, APAL выкладывал тоже пару штук...

(тему переношу в "Задачи")
Yavrik
В поиске иска. Ничего подходящего не нашёл sad.gif
volvo
Ну, подходящего-то и не будет, каждая задача пишется под определенные требования, то, что выкладывалось здесь - оно соответствовало требованиям задающих вопрос, а не твоим. Вот ты и расскажи, чего ты требуешь от программы, чем можно пользоваться (ООП? Процедурные/функциональные типы? Другие расширенные средства языка?), а не так: "мне тут ничего не подошло, помогите". Что "помогите"? Что дальше будет делать твоя программа? Ну, нарисую я кнопку, ну, нажмешь ты ее (вопрос на засыпку: ЧЕМ? Мышью? Enter-ом? Какой-то определенной комбинацией клавиш?), вылезет меню. Что дальше? Меню, оно как бы тоже должно что-то делать, правда?

Начать объяснение необходимой тебе функциональности неплохо было бы с того, тебе вообще это все в текстовом или в графическом режиме надо?
Yavrik
Язык Турбо Паскаль! Думаю это каждому понятно smile.gif ведь зачем создавать тему в форуме паскаля, если вопрос не по нём???

Мне нужно что-бы вы помогли мне только с кнопкой, а точнее что-бы когда я жму на неё левой кнопкой мыши что-бы вылезло меню...

теперь все поняли мой вопрос?

Добавлено через 3 мин.
 Unit EgaMouse;

{*******************************************************************}
{*                                                                 *}
{*                   EgaMouse - EGA Mouse Unit                     *}
{*                                                                 *}
{*                    version 1.0, 02/02/88                        *}
{*                by Eduardo Martins 73300,267                     *}
{*                                                                 *}
{*                        based on Mouse4                          *}
{*                     version .9, 11/20/87                        *}
{*                by Richard Sadowsky 74017,1670                   *}
{*                                                                 *}
{*             thanks to John Sierasky for helping me out          *}
{*            with function CursorShape (mouse function 9)         *}
{*                                                                 *}
{*                 released to the public domain                   *}
{*                                                                 *}
{*******************************************************************}
{*                                                                 *}
{* Version 2.0, 3/14/88                                            *}
{* Modifications by Lew Paper                                      *}
{*                                                                 *}
{*                                                                 *}
{* 1.     The original five cursor types came from the Microsoft   *}
{* Mouse manual.  I changed the unit so that each one has its      *}
{* own hot spot, as located in the Microsoft Mouse manual.         *}
{*                                                                 *}
{* 2.     I added the extra error checking which the Microsoft     *}
{* Mouse manual recommends in Procedure InitMouse.  If the         *}
{* mouse interrupt ($33) does not point to a valid location,       *}
{* InitMouse sets Mouse_Error to 1 and Mouse_Installed to FALSE.   *}
{*                                                                 *}
{* 3.     I moved a lot of variables from the INTERFACE to the     *}
{* IMPLEMENTLATION because they are none of the calling program's  *}
{* business.                                                       *}
{*                                                                 *}
{*******************************************************************}

Interface

Uses DOS;

const
  LEFTPRESS        = 2;
  LEFTREL          = 4;
  RIGHTPRESS       = 8;
  RIGHTREL         = 16;

  Standard         = 1;
  PointingHand     = 2;
  HourGlass        = 3;
  DiagCross        = 4;
  CheckMark        = 5;



var
  Mouse_Installed  : Boolean;
  Mouse_Error      : Word;

function InitMouse : Word;
{ Function 0 - Initialize mouse software and hardware }

procedure ShowMouse;
{ function 1 - show mouse cursor }

procedure HideMouse;
{ function 2 - hide mouse cursor }

function MousePosition(var MouseX,MouseY : Word) : Word;
{ function 3 - return mouse position and button status }
{ X and Y values scaled for 640 x 350 EGA mode }

procedure SetMousePosition(mousex, mousey: Word);
{ function 4 - sets mouse position  }
{ X and Y values scaled for 640 x 350 EGA mode }

function MousePress(button: Word;
                     var count, lastx, lasty: Word): Word;
{ function 5 - gets button press information  }
{ X and Y values scaled for 640 x 350 EGA mode }

function MouseRelease(button: Word;
                       var count, lastx, lasty: Word): Word;
{ function 6 - gets button release information  }
{ X and Y values scaled for 640 x 350 EGA mode }

procedure SetMouseXY(x1,y1,x2,y2: Word);
{ functions 7 and 8 - sets min/max values for horizontal/vertical  }
{ X and Y values scaled for 640 x 350 EGA mode }

procedure RestoreMouseXY;
{ functions 7 and 8 - restores min/max values for CGA screen }

procedure CursorShape(Shape: integer);
{ function 9 - sets the graphics cursor shape }

procedure SetPixeltoMickey(Horiz,Verti : Word);
{ function 15 - sets the mickey to pixel ratio }


implementation

VAR
  Mouse_Reg        : Registers;

function InitMouse : Word;
{ Function 0 - Initialize mouse software and hardware }

CONST
  IRET = $CF;

VAR
  MouseInterrupt: ^Byte ABSOLUTE 0:$CC;     {4 * $33 = $CC}

begin
  IF MouseInterrupt = NIL
  THEN
    InitMouse := 1
  ELSE IF MouseInterrupt^ = IRET
  THEN
    InitMouse := 1
  ELSE
  BEGIN
    with Mouse_Reg do
      Ax := 0;
    Intr($33,Mouse_Reg);
    InitMouse := Mouse_Reg.Ax
  END;
end;

procedure ShowMouse;
{ function 1 - show mouse cursor }

begin
  Mouse_Reg.Ax := 1;
  Intr($33,Mouse_Reg);
end;

procedure HideMouse;
{ function 2 - hide mouse cursor }

begin
  Mouse_Reg.AX := 2;
  Intr($33,Mouse_Reg);
end;

function MousePosition(var MouseX,MouseY : Word) : Word;
{ function 3 - return mouse position and button status }
{ X and Y values scaled for 640 x 350 EGA mode }

begin
  Mouse_Reg.Ax := 3;
  Intr($33,Mouse_Reg);
  with Mouse_Reg do begin
    MouseX := Succ(Cx);
    MouseY := Succ(Dx);
    MousePosition := Bx;
  end;
end;

procedure SetMousePosition(mousex, mousey: Word);
{ function 4 - sets mouse position  }
{ X and Y values scaled for 640 x 350 EGA mode }

begin
  Mouse_Reg.ax:=4;
  Mouse_Reg.cx:=Pred(mousex);
  Mouse_Reg.dx:=Pred(mousey);
  intr($33,Mouse_Reg);
end;

function MousePress(button: Word;
                     var count, lastx, lasty: Word): Word;
{ function 5 - gets button press information  }
{ X and Y values scaled for 640 x 350 EGA mode }

begin
  Mouse_Reg.ax:=5;
  Mouse_Reg.bx:=button;
  intr($33,Mouse_Reg);;
  mousepress:=Mouse_Reg.ax;
  count:=Mouse_Reg.bx;
  lastx:=Succ(Mouse_Reg.cx );
  lasty:=Succ(Mouse_Reg.dx );
end;

function MouseRelease(button: Word;
                       var count, lastx, lasty: Word): Word;
{ function 6 - gets button release information  }
{ X and Y values scaled for 640 x 350 EGA mode }

begin
  Mouse_Reg.ax:=6;
  Mouse_Reg.bx:=button;
  intr($33,Mouse_Reg);;
  mouserelease:=Mouse_Reg.ax;
  count:=Mouse_Reg.bx;
  lastx := Succ(Mouse_Reg.cx );
  lasty := Succ(Mouse_Reg.dx );
end;

procedure SetMouseXY(x1,y1,x2,y2: Word);
{ functions 7 and 8 - sets min/max values for horizontal/vertical  }
{ X and Y values scaled for 640 x 350 EGA mode }

begin
  Mouse_Reg.ax:=7;
  Mouse_Reg.cx:=Pred(x1);
  Mouse_Reg.dx:=Pred(x2);
  intr($33,Mouse_Reg);
  Mouse_Reg.ax:=8;
  Mouse_Reg.cx:=Pred(y1);
  Mouse_Reg.dx:=Pred(y2);
  intr($33,Mouse_Reg);
end;

procedure RestoreMouseXY;
{ functions 7 and 8 - restores min/max values for EGA screen }

begin
  Mouse_Reg.ax:=7;
  Mouse_Reg.cx:=0;
  Mouse_Reg.dx:=639;
  intr($33,Mouse_Reg);
  Mouse_Reg.ax:=8;
  Mouse_Reg.cx:=0;
  Mouse_Reg.dx:=349;
  intr($33,Mouse_Reg);
end;


procedure CursorShape(Shape:integer);
{ function 9 - sets the graphics cursor shape }


TYPE
  CursorType = RECORD
    Mask             : ARRAY[0..1, 0..15] OF WORD;
    HorizontalHotSpot: WORD;
    VerticalHotSpot  : WORD;
  END;

CONST

  Hand: CursorType =
    (
      Mask: (($E1FF,$E1FF,$E1FF,$E1FF,$E000,$E000,$E000,$0000,
              $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000),

             ($1E00,$1200,$1200,$1200,$13FF,$1249,$1249,$F249,
              $9001,$9001,$9001,$8001,$8001,$8001,$8001,$FFFF));

      HorizontalHotSpot: 9;
      VerticalHotSpot:   0
    );

  Hour: CursorType =
    (
      Mask: (($0000,$0000,$0000,$0000,$8001,$C003,$E007,$F00F,
              $E007,$C003,$8001,$0000,$0000,$0000,$0000,$FFFF),

             ($0000,$7FFE,$6006,$300C,$1818,$0C30,$0660,$03C0,
              $0660,$0C30,$1998,$33CC,$67E6,$7FFE,$0000,$0000));

      HorizontalHotSpot: 7;
      VerticalHotSpot  : 7
    );

   Stand: CursorType =
    (
      Mask: (($3FFF,$1FFF,$0FFF,$07FF,$03FF,$01FF,$00FF,$007F,
              $003F,$001F,$01FF,$10FF,$30FF,$F87F,$F87F,$FC7F),

             ($0000,$4000,$6000,$7000,$7800,$7C00,$7E00,$7F00,
              $7F80,$7C00,$6C00,$4600,$0600,$0300,$0300,$0000));

      HorizontalHotSpot: $FFFF;              {WORD(-1)}
      VerticalHotSpot  : $FFFF
    );

   DiagC: CursorType =
    (
      Mask: (($07E0,$0180,$0000,$C003,$F00F,$C003,$0000,$0180,
              $07E0,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF),

             ($0000,$700E,$1C38,$0660,$03C0,$0660,$1C38,$700E,
              $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000));

      HorizontalHotSpot: 7;
      VerticalHotSpot  : 4
    );

   Check: CursorType =
    (
      Mask: (($FFF0,$FFE0,$FFC0,$FF81,$FF03,$0607,$000F,$001F,
              $C03F,$F07F,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF),

              ($0000,$0006,$000C,$0018,$0030,$0060,$70C0,$1D80,
               $0700,$0000,$0000,$0000,$0000,$0000,$0000,$0000));

      HorizontalHotSpot: 6;
      VerticalHotSpot  : 7
    );

begin

   case Shape of
      1: BEGIN
           Mouse_Reg.BX := Stand.HorizontalHotSpot;
           Mouse_Reg.CX := Stand.VerticalHotSpot;
           Mouse_Reg.ES := Seg(Stand.Mask);
           Mouse_Reg.DX := Ofs(Stand.Mask);
         END;
      2: BEGIN
           Mouse_Reg.BX := Hand.HorizontalHotSpot;
           Mouse_Reg.CX := Hand.VerticalHotSpot;
           Mouse_Reg.ES := Seg(Hand.Mask);
           Mouse_Reg.DX := Ofs(Hand.Mask);
         END;
      3: BEGIN
           Mouse_Reg.BX := Hour.HorizontalHotSpot;
           Mouse_Reg.CX := Hour.VerticalHotSpot;
           Mouse_Reg.ES := Seg(Hour.Mask);
           Mouse_Reg.DX := Ofs(Hour.Mask);
         END;
      4: BEGIN
           Mouse_Reg.BX := DiagC.HorizontalHotSpot;
           Mouse_Reg.CX := DiagC.VerticalHotSpot;
           Mouse_Reg.ES := Seg(DiagC.Mask);
           Mouse_Reg.DX := Ofs(DiagC.Mask);
         END;
      5: BEGIN
           Mouse_Reg.BX := Check.HorizontalHotSpot;
           Mouse_Reg.CX := Check.VerticalHotSpot;
           Mouse_Reg.ES := Seg(Check.Mask);
           Mouse_Reg.DX := Ofs(Check.Mask);
         END;
   end;

  Mouse_Reg.AX := 9;
  Intr($33, Mouse_Reg);
end;


procedure SetPixeltoMickey(Horiz,Verti : Word);
{ function 15 - sets the mickey to pixel ratio }

begin
  with Mouse_Reg do begin
    Ax := 15;
    Cx := Horiz;
    Dx := Verti;
  end;
  Intr($33,Mouse_Reg)
end;

begin
  Mouse_Error := InitMouse;
  Mouse_Installed := Mouse_Error = 65535;
end.


вот исходник модуля для работы с мышой.
volvo
Ну, поскольку отвечать на вопросы, которые тебе задаются, ты не хочешь (наверное, думаешь, что я из праздного любопытства спрашиваю? Ошибаешься, и ты в этом сейчас убедишься), то и я тоже буду играть по СВОИМ правилам. В архиве - проект. Откомпилируй его (MAINFILE.PAS), и запусти. Всем твоим требованиям он удовлетворяет: на экране - кнопка и мышь, по нажатию на кнопку выбрасывается меню, проект свободно собирается в TP7 (поскольку писал я его, когда еще и TP7 самого в помине не было, на TP6), сейчас я из него выбросил больше 90% функционала, оставил только то, что нужно для решения твоей задачи.

Стрелками выбираешь "Exit", жмешь Enter и программа завершается. В принципе, в оригинале можно было и пункты меню выбирать мышью, но тебе же лень сказать лишнее слово, так я это тоже вырезал...

А вот теперь - домашнее задание: попробуй разобраться, как оно работает. Убедился, что я не просто так спрашивал про используемые средства?
Yavrik
Нет, мне не лень сказать.
попросил самое главное то, что хотел узнать.

Меня просто интересовало как сделать такую кнопку.

С меню я потом розберусь.

Большое спасибо за помощь!!!

Посмотрел, хороший пример!
Немного смотрел исходник, думаю разберусь что, к чему smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.