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

Вниз

Хм, а как запуздырить иконку в StatusBar?   Найти похожие ветки 

 
Kolan ©   (2008-01-16 14:45) [0]

Пробовал так:
procedure TMainForm.DrawCalendarIconInStatusBar(AStatusBar: TStatusBar;
 AImageList: TImageList; AImageIndex: Integer);
begin
 if Assigned(AStatusBar) and Assigned(AImageList) then
 begin
   AImageList.Draw(AStatusBar.Canvas, 2, 2, AImageIndex);
 end;
end;

не видно ничего&#133


 
Palladin ©   (2008-01-16 15:11) [1]

дык рисование то нужно делать на tstatusbar.ondrawpanel и ей (панели) еще ко всему прочему нужно выставить Style:=psOwnerDraw


 
Kolan ©   (2008-01-16 15:13) [2]

угу, шас попробую&#133


 
Kolan ©   (2008-01-16 15:21) [3]

Так:
procedure TMainForm.DrawIconOnStatusBar(AStatusBar: TStatusBar;
 AImageList: TImageList; AImageIndex: Integer; AnOffset: TPoint);
begin
 if Assigned(AStatusBar) and Assigned(AImageList) then
 begin
   AImageList.Draw(AStatusBar.Canvas, AnOffset.X, AnOffset.Y, AImageIndex);
 end;
end;

procedure TMainForm.StatusBarDrawPanel(StatusBar: TStatusBar;
 Panel: TStatusPanel; const Rect: TRect);
begin
 DrawIconOnStatusBar(StatusBar, MainMenuImageList, 13, Point(4, 4));
 StatusBar.Canvas.TextOut(Rect.Left+4+16, Rect.Top+3, Panel.Text);
end;


Не видно иконки :(


 
Palladin ©   (2008-01-16 15:29) [4]

ну млин... у меня все рисует... и что значит поинт(4,4) тебе Рект передается для рисования... индекс панели тоже учитывай, тебе Панел передается, а может и картинки то с таким номером нет


 
ПостОвый терминатор ©   (2008-01-16 15:37) [5]

procedure TForm1.FormCreate(Sender: TObject);
begin
with Image1 do
 begin
   Parent := StatusBar1;
   Top := 5;
   Left := 2;
 end;
end;


 
Kolan ©   (2008-01-16 15:45) [6]

> тебе Рект передается для рисования

Забыл. :Работает :) А клик по этой панели поймать низя? В инспекторе у нее вообще нет событий&#133


 
Palladin ©   (2008-01-16 15:46) [7]


> [5] ПостОвый терминатор ©   (16.01.08 15:37)

казалось бы причем тут image1


> [6] Kolan ©   (16.01.08 15:45)

по панели нельзя... придется ловить по статусбару и немножечко считать...


 
Kolan ©   (2008-01-16 15:59) [8]

> немножечко считать&#133

procedure TMainForm.StatusBarDblClick(Sender: TObject);
var
 CursorPos: TPoint;
begin
 if Sender is TStatusBar then
   with Sender as TStatusBar do
   begin
     if GetCursorPos(CursorPos) then
     begin
       if (Panels.Count >= 2)
         and ((CursorPos.X > Panels[0].Width) and (CursorPos.X < Panels[0].Width + Panels[1].Width ))
       then
         CreatePeriodAction.Execute;
     end;
   end;
end;


Как-то так? Толкьо блин с координатами не пойму как правильно разобраться&#133


 
Palladin ©   (2008-01-16 16:03) [9]

procedure TForm1.StatusBar1Click(Sender: TObject);
Var
p:TPoint;
i:Integer;
x:Integer;
begin
p:=StatusBar1.ScreenToClient(Mouse.CursorPos);
x:=0;
For i:=0 to StatusBar1.Panels.Count-1 Do
 Begin
  Inc(x,StatusBar1.Panels[i].Width);
  If x>p.X Then
   Begin
    ShowMessage("подомной панель с индексом "+IntToStr(i));
    Exit;
   End;
 End;
ShowMessage("панели где то рядом, целься лучше");
end;


 
ПостОвый терминатор ©   (2008-01-16 16:07) [10]


> Palladin ©   (16.01.08 15:46) [7]
>
> > [5] ПостОвый терминатор ©   (16.01.08 15:37)
>
> казалось бы причем тут image1

Просто мне показалось, что это довольно простое решение отвечающее

> Хм, а как запуздырить иконку в StatusBar?

Ведь о функциональности этой иконки автор умалчивает.
А на TImage можно повесить практически любые события ...


 
Palladin ©   (2008-01-16 16:09) [11]


> [10] ПостОвый терминатор ©   (16.01.08 16:07)

если внимательно приглядишься, афтар поступил несоизмеримо гораздо более разумно нежели плодить кучу TImage, а обвешивание иконок событиями - несколько строчек кода на соотвествующие события TStatusBar


 
ПостОвый терминатор ©   (2008-01-16 16:11) [12]


> Palladin ©   (16.01.08 16:09) [11]

Возможно


 
Kolan ©   (2008-01-16 16:26) [13]

Благодарю, круто.  :)
procedure TMainForm.StatusBarDblClick(Sender: TObject);
begin
 if Sender is TStatusBar then
 begin
   if GetPanelIndexAtCursor(Sender as TStatusBar) = 1 then
     ChooseCurrentPeriodAction.Execute;
 end;    
end;

function TMainForm.GetPanelIndexAtCursor(AStatusBar: TStatusBar): Integer;
var
 I: Integer;
 CursorPos: TPoint;
 X: Integer;
begin
 Result := &#151;1;
 if Assigned(AStatusBar) then
 begin
   CursorPos := AStatusBar.ScreenToClient(Mouse.CursorPos);
   X := 0;
   for I := 0 to AStatusBar.Panels.Count &#151; 1 do
   begin
     X := X + AStatusBar.Panels[I].Width;
     if X > CursorPos.X then
     begin
       Result := I;
       Exit;
     end;
   end;
 end;
end;


 
Palladin ©   (2008-01-16 16:32) [14]

if Sender is TStatusBar then
begin
 if GetPanelIndexAtCursor(Sender as TStatusBar) = 1 then ChooseCurrentPeriodAction.Execute;
end;    

as зря, приведением типов будет быстрее и абсолютно правомерно, бо ты уже проверил используя is

здесь это конечно не критично, но просто на будущее, если планируется частый частый вызов подобной конструкции


 
Kolan ©   (2008-01-16 16:38) [15]

>
> здесь это конечно не критично, но просто на будущее, если
> планируется частый частый вызов подобной конструкции

ок. Запомню, незнал что быстрее.

А где стандартная процедура подставляет смещение для текста, вот эти циферки:
StatusBar.Canvas.TextOut(Rect.Left+5+MainMenuImageList.Width, Rect.Top+3, Panel.Text);

Я щас растянул бар, и моя надпись уже не на одном уровне со стандартно нарисованной. Видимо стандартная вычисляет как-то, но не найду как.



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

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

Наверх





Память: 0.49 MB
Время: 0.056 c
15-1199780453
Anatoly Podgoretsky
2008-01-08 11:20
2008.02.10
Предложения от www.podgoretsky.com


15-1199017899
AlexanderMS
2007-12-30 15:31
2008.02.10
Скрипты, меняющие только что введённый в редакторе кода текст


15-1199714934
Parus
2008-01-07 17:08
2008.02.10
PHP: register_shutdown_function для рекламы


8-1173277762
Quelle
2007-03-07 17:29
2008.02.10
Lab в CMYK


15-1199969784
Вссм
2008-01-10 15:56
2008.02.10
virtual server 2005





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