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

Вниз

Бред какой-то   Найти похожие ветки 

 
PaRL   (2002-11-23 09:55) [0]

Pan : array of TPanel;
const Cols : array [0..15] of TColor = (clRed,...,clBlack);
var Col : TColor;
begin
for k := 0 to 15 do if Col = Cols[k] then
begin
SendMessage(Pan[k].Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(Pan[k].Handle, WM_LBUTTONUP, 0, 0);
end;
end;


В цикле происходит убывание, т.е. 15, 14, 13... Почему?
Даже когда доходит до k = 3, то цвета совпадают и должно послаться сообщение панели, в отладчике всё работает, т.е.
SendMessage(Pan[ 3].Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(Pan[ 3].Handle, WM_LBUTTONUP, 0, 0);

, но на деле получается, что сообщение отправляется Pan[ 0].Handle.


 
Юрий Зотов   (2002-11-23 10:52) [1]

1. Переменная k - локальная или глобальная?
2. Попробуйте отключить оптимизацию.


 
Anatoly Podgoretsky   (2002-11-23 10:58) [2]

Где объявлено К и также определения обработчиков, возможно также что то с обработчиками

Вставь в текст тестовые сообщения

begin
ShowMessage("Down="IntToStr(K));
SendMessage(Pan[k].Handle, WM_LBUTTONDOWN, 0, 0);
ShowMessage("Up="IntToStr(K));
SendMessage(Pan[k].Handle, WM_LBUTTONUP, 0, 0);
ShowMessage("End="IntToStr(K));
end;


 
PaRL   (2002-11-23 13:46) [3]


> begin
> ShowMessage("Down="IntToStr(K));
> SendMessage(Pan[k].Handle, WM_LBUTTONDOWN, 0, 0);
> ShowMessage("Up="IntToStr(K));
> SendMessage(Pan[k].Handle, WM_LBUTTONUP, 0, 0);
> ShowMessage("End="IntToStr(K));
> end;

Не, до этого я и сам дотумкался...
k - локальная.

> 2. Попробуйте отключить оптимизацию.

Пробовал. :(


 
Anatoly Podgoretsky   (2002-11-23 14:04) [4]

Ну и какие сообщения ны получил?
Насчет того, что локальная приходится верить только на слово, так как в приведенном коде объявление отсутствует, и также отсутствуе объявление самой процедуры или что у тебя там, ты наверно решил нам загадку задать?


 
PaRL   (2002-11-23 14:34) [5]


> Ну и какие сообщения ны получил?



> Даже когда доходит до k = 3, то цвета совпадают и должно
> послаться сообщение панели, в отладчике всё работает, т.е.
>
> SendMessage(Pan[3].Handle, WM_LBUTTONDOWN, 0, 0);
> SendMessage(Pan[3].Handle, WM_LBUTTONUP, 0, 0);
> , но на деле получается, что сообщение отправляется Pan[0].Handle.


k = 3!


 
PaRL   (2002-11-23 14:37) [6]


implementation

uses MainU, AddU, IntFaseU;

const Cols : array [0..15] of TColor = (clBlack, clMaroon, clGreen, clOlive,
clNavy, clPurple, clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue,
clFuchsia, clAqua, clWhite);

var PanCol : array [0..15] of TPanel;

....

procedure TfmSyntax.FormCreate(Sender: TObject);
var a, b, i : byte;
s : string;
begin
i := 0;
for a := 0 to 3 do
for b := 0 to 3 do
begin
PanCol[i] := TPanel.Create(Self);
PanCol[i].Parent := Panel1;
PanCol[i].Left := 10 + a*33;
PanCol[i].Top := 8 + b*33;
PanCol[i].Width := 33;
PanCol[i].Height := 33;
PanCol[i].BevelOuter := bvRaised;
PanCol[i].BevelInner := bvRaised;
PanCol[i].Color := Cols[i];
PanCol[i].OnClick := ColClick;
inc(i);
end;
SendMessage(PanCol[0].Handle, WM_LBUTTONDOWN, 0, 0); // работает
SendMessage(PanCol[0].Handle, WM_LBUTTONUP, 0, 0); // работает
end;

procedure TfmSyntax.sbEditClick(Sender: TObject);
var a, st, pp : integer;
s : string;
begin
st := 0;
for a := 0 to lbWords.Count-1 do
if lbWords.Selected[a] then begin st := 1; pp := a; end;
for a := 0 to lbSymbs.Count-1 do
if lbSymbs.Selected[a] then begin st := 2; pp := a; end;

if (st = 1) or (st = 2) then
begin
cbBold.Checked := false;
cbItalic.Checked := false;
cbUnderline.Checked := false;
cbStrikeOut.Checked := false;

if st = 1 then s := lbWords.Items.Strings[pp];
if st = 2 then s := lbSymbs.Items.Strings[pp];
pp := 0;
for a := 0 to High(Attr) do if s = Attr[a].Name then
begin
for pp := 0 to 15 do if Attr[a].Color = Cols[pp] then
begin
SendMessage(PanCol[pp].Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(PanCol[pp].Handle, WM_LBUTTONUP, 0, 0);
end;
if fsBold in Attr[a].MainA then cbBold.Checked := true;
if fsItalic in Attr[a].MainA then cbItalic.Checked := true;
if fsUnderline in Attr[a].MainA then cbUnderline.Checked := true;
if fsStrikeOut in Attr[a].MainA then cbStrikeOut.Checked := true;
SB.Panels[0].Text := "Редактирование";
SB.Panels[1].Text := Attr[a].Name;
end;
end
else Application.MessageBox("Не выбран(о) символ(слово).",
PChar(Application.Title), mb_Ok);
end;


 
Anatoly Podgoretsky   (2002-11-23 14:48) [7]

Ты должен получить не одно сообщение а три
Не вижу обработчика нажатия
Продолжаем играть в загадки


 
PaRL   (2002-11-23 15:01) [8]


> Ты должен получить не одно сообщение а три

Почему. Какие.


...
public
procedure ColClick(Sender: TObject);
end;

...

procedure TfmSyntax.ColClick(Sender: TObject);
var a, n : byte;
begin
n := 0;
GetCursorPos(pt);
HP := WindowFromPoint(pt);

if HP = fmSyntax.Handle then Close;
for a := 0 to High(PanCol) do
if PanCol[a].Handle = HP then n := a;

for a := 0 to High(PanCol) do
if a <> n then
begin
PanCol[a].BevelInner := bvRaised;
PanCol[a].BevelOuter := bvRaised;
PanCol[a].Caption := "";
end
else
begin
Col := PanCol[a].Color;
PanCol[a].Caption := "¤";
PanCol[a].Font.Style := [fsBold];
PanCol[a].Font.Color := Cols[15-a];
if (PanCol[a].Color = clGray) or (PanCol[a].Color = clSilver)
then PanCol[a].Font.Color := clYellow;
PanCol[a].BevelInner := bvLowered;
PanCol[a].BevelOuter := bvLowered;
edExample.Font.Color := PanCol[a].Color;
end;
end;



 
PaRL   (2002-11-23 20:33) [9]

Вот.


 
PaRL   (2002-11-24 22:42) [10]

Ну что никаких идей нет? Я всё что можно привёл уже. Помогите плз.



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

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

Наверх





Память: 0.47 MB
Время: 0.007 c
1-14674
lob
2002-11-23 18:12
2002.12.05
как нужной мне переменной применить значение TItemChange


1-14607
Peroon
2002-11-24 19:32
2002.12.05
OpenDialog


1-14536
Sergey_Suhoy
2002-11-26 17:40
2002.12.05
Ошибка


1-14652
Novichek
2002-11-23 15:03
2002.12.05
выделение строки в StringGrid заданным цветом.


3-14379
Alexey Goosev
2002-11-19 22:47
2002.12.05
Только не смейтесь - поиск в мемо-поле





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский