Форум: "Основная";
Текущий архив: 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