Главная страница
    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.48 MB
Время: 0.047 c
1-1193752142
Иван_А
2007-10-30 16:49
2008.02.10
WebBrowser


4-1183368356
AutoLoad
2007-07-02 13:25
2008.02.10
Автозапуск


8-1173450743
Аликъ
2007-03-09 17:32
2008.02.10
bass уровень


2-1200840259
savyhinst
2008-01-20 17:44
2008.02.10
TMemoryStream->TFileStream


2-1200658916
_Shuler_
2008-01-18 15:21
2008.02.10
Подсказка





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