Форум: "Начинающим";
Текущий архив: 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.047 c