Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

MouseDown   Найти похожие ветки 

 
Romm ©   (2007-07-04 18:10) [0]

Еще раз здравствуйте Мастера.
Сегодня не получается осуществить следущее:

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if Form1.MouseDown(mbLeft,ssLeft,X,Y) then
 Form1.Canvas.Pixels[X,Y]:=clBlack;
end;


Вот собственно по справке, а получается несоответствие типов.
Скажите как правильно.
Спасибо


 
Johnmen ©   (2007-07-04 18:18) [1]


> Вот собственно по справке,

Справку в студию!


 
Johnmen ©   (2007-07-04 18:20) [2]

Да ладно, не надо :)
Читай TShiftState + F1


 
Romm ©   (2007-07-04 18:21) [3]


> Johnmen ©   (04.07.07 18:18) [1]

procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); dynamic;

type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);

ssLeft The left mouse button is held down.


 
Romm ©   (2007-07-04 18:22) [4]


> TShiftState + F1


> type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft,
>  ssRight, ssMiddle, ssDouble);

воть... а как нужно правильно параметр указать?


 
Johnmen ©   (2007-07-04 18:24) [5]

set + F1


 
Romm ©   (2007-07-04 18:30) [6]


> Johnmen ©   (04.07.07 18:24) [5]

вот эта операция:
> set + F1

ни к чему не привела =) скажи пожалуйста так)


 
Johnmen ©   (2007-07-04 18:33) [7]

A set is a collection of values of the same ordinal type. The values have no inherent order, nor is it meaningful for a value to be included twice in a set.

The range of a set type is the power set of a specific ordinal type, called the base type; that is, the possible values of the set type are all the subsets of the base type, including the empty set. The base type can have no more than 256 possible values, and their ordinalities must fall between 0 and 255. Any construction of the form

set of baseType

where baseType is an appropriate ordinal type, identifies a set type.

Because of the size limitations for base types, set types are usually defined with subranges. For example, the declarations

type
 TSomeInts = 1..250;
 TIntSet = set of TSomeInts;

create a set type called TIntSet whose values are collections of integers in the range from 1 to 250. You could accomplish the same thing with

type TIntSet = set of 1..250;

Given this declaration, you can create a sets like this:

var Set1, Set2: TIntSet;
...
Set1 := [1, 3, 5, 7, 9];
Set2 := [2, 4, 6, 8, 10]

You can also use the set of ... construction directly in variable declarations:

var MySet: set of "a".."z";
...
MySet := ["a","b","c"];

Other examples of set types include

set of Byte
set of (Club, Diamond, Heart, Spade)
set of Char;

The in operator tests set membership:

if "a" in MySet then ... { do something } ;

Every set type can hold the empty set, denoted by [].

(c) F1


 
Romm ©   (2007-07-04 18:37) [8]


> Johnmen ©   (04.07.07 18:33) [7]

Спасибо.

блин, говорили мне - ходи на уроки английского....

Пока я пытаюсь перевести сиё и понять что такое "set" ) , мож напишет все таки кто-нибудь как надо... )


 
Virgo_Style ©   (2007-07-04 18:42) [9]

Romm ©   (04.07.07 18:22) [4]
а как нужно правильно параметр указать?


А зачем тебе, все равно ж работать не будет, она же

> procedure


 
Romm ©   (2007-07-04 18:49) [10]


> Virgo_Style ©   (04.07.07 18:42) [9]


вот я только щас заметил)
А как тогда проверить нажата ли кнопа мыши?


 
{RASkov} ©   (2007-07-04 18:51) [11]

> [8] Romm ©   (04.07.07 18:37)
> мож напишет все таки кто-нибудь как надо... )

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
  Canvas.Pixels[X,Y]:=clBlack;
end;


 
{RASkov} ©   (2007-07-04 18:52) [12]

> [10] Romm ©   (04.07.07 18:49)
> вот я только щас заметил)

Круто :) А когда все это дело писал... не видел? :)


 
Romm ©   (2007-07-04 18:57) [13]


> {RASkov} ©   (04.07.07 18:52) [12]

:) был уверен. что это функция - как-то же проверяется нажатие кнопок мыши..


 
Romm ©   (2007-07-04 19:06) [14]

Еще вопросик оффтопный. При перересовки формы - оставленные пиксели исчезают, как быть?


 
Галинка ©   (2007-07-04 19:09) [15]

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


 
Romm ©   (2007-07-04 19:11) [16]


> может слишком прямолинейно, но можно флажок завести. Когда
> кнопку надимаем - истина, когда отпускаем - ложь и тогда
> вмсесте с шифтом проверять значение... Не катит?


> procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
>  X, Y: Integer);
> begin
> if ssLeft in Shift then
>   Canvas.Pixels[X,Y]:=clBlack;
> end

?


 
{RASkov} ©   (2007-07-04 19:19) [17]

> [14] Romm ©   (04.07.07 19:06)

Или никак...(
Или рисовать не на канве формы, а на канве битмапа а уже его выводить на канву формы, например, в ОнПаинт формы....
procedure TForm.FormPaint();
begin
 if Assigned(Bmp) then Canvas.Draw(0,0, Bmp);
end;

Битмап Bmp должен создаваться, например на создании формы, и размеры ему нужно указать = размеры формы...
Соответственно:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(Bmp) and (ssLeft in Shift) then
  Bmp.Canvas.Pixels[X,Y]:=clBlack;
end;
Примерно так...


 
Romm ©   (2007-07-04 19:24) [18]


> {RASkov} ©   (04.07.07 19:19) [17]

ясно, спасибо.

Читая предыдущие темы понял что тут не любят студентов во время сессий :) Просто хотел сказать: я не один из них ))


 
Галинка ©   (2007-07-04 19:56) [19]

privat
 btnLeft : boolean;

{
 в событиях OnMouseDown/OnMouseUp должен быть параметр MouseButton, вот тогда если он LeftButton то на Down btnLeft = true, а на Up - btnLeft = false.
}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (btnLeft) & (ssLeft in Shift) then
 Canvas.Pixels[X,Y]:=clBlack;
end;


 
Галинка ©   (2007-07-04 19:58) [20]

{RASkov} ©   (04.07.07 19:19) [17]

вопрос кажется был не про где рисовать, а чтобы рисовать только при нажатой левой кнопке и шифте. А вообще лучше конечно не на самой форме.


 
{RASkov} ©   (2007-07-04 20:27) [21]

> [20] Галинка ©   (04.07.07 19:58)
> при нажатой левой кнопке и шифте

Если чесно .... нафик еще и шифт-то :))) Ладно.... раз надо, значит надо.... но зачем дополнительную переменную?

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 //if Shift=[ssLeft, ssShift] then Bmp.Canvas.Pixels[X,Y]:=clRed;
или
 if (ssLeft in Shift) and (ssShift in Shift) then Bmp.Canvas.Pixels[X,Y]:=clRed;
end;


 
{RASkov} ©   (2007-07-04 20:36) [22]

> procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
> X, Y: Integer);
> begin
> if Assigned(Bmp) and (ssLeft in Shift) then
>  Bmp.Canvas.Pixels[X,Y]:=clBlack;
> end;


Т.е. тут нужно так:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if (ssLeft in Shift) and (ssShift in Shift) then begin
  Bmp.Canvas.Pixels[X,Y]:=clBlack;
  Canvas.Pixels[X,Y]:=clBlack;
 end;
end;

или так:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
 if (ssLeft in Shift) and (ssShift in Shift) then begin
  Bmp.Canvas.Pixels[X,Y]:=clBlack;
  Invalidate;
 end;
end;

А то не видно будет, что рисуем.....)


 
Галинка ©   (2007-07-04 20:37) [23]

{RASkov} ©   (04.07.07 20:27) [21]

ну тады хорошо. Я и забыла уже что все эти кнопки в этом множестве. Даже красивее получается.

А этот вывод почему-то пришел на ум в виду

Form1.MouseDown(mbLeft,ssLeft,X,Y)

Может и мимо конечно


 
{RASkov} ©   (2007-07-04 20:42) [24]

> [23] Галинка ©   (04.07.07 20:37)

> ну тады хорошо.

Спасибо :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.041 c
2-1183377068
Regdown
2007-07-02 15:51
2007.07.29
Ряд вопросов


15-1183575856
Prohodil Mimo
2007-07-04 23:04
2007.07.29
Google panel, как отключить голячие клавишы?


2-1183704839
zapis
2007-07-06 10:53
2007.07.29
ADOConnection


15-1182859100
Predfer
2007-06-26 15:58
2007.07.29
Мышь PS/2 не работает


15-1183103064
Igorek
2007-06-29 11:44
2007.07.29
Сферическая геометрия - учебник, справочник, курс лекций





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский