Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2009, 22:46   #11
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Перевести вот это?
Нет вот это все
Неужели нету нормального способа отобразить на хинтах картинку? Или другой альтернативы им.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 13.08.2009, 23:04   #12
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Вот это мне надо перевести в код на C Билдере:
Код:
unit HintX;
interface
uses
  Windows, Messages, Controls,Graphics;
type
  TIconHintX = class(THintWindow)
  protected
    procedure Paint; override;
  public
    function CalcHintRect(MaxWidth: Integer; const AHint: string;
    AData: Pointer): TRect; override;
end;

implementation
uses Forms;

{ TIconHintX }

function TIconHintX.CalcHintRect(MaxWidth: Integer;
const AHint: string; AData: Pointer): TRect;
begin
  Result := inherited CalcHintRect(MaxWidth, AHint, AData);
  Result.Right := (Length(AHint) * 5) + Application.Icon.Width;
  Result.Bottom := (Application.Icon.Height) * 2;
end;

procedure TIconHintX.Paint;
const
  MARGIN = 5;
var bmp: TBitmap;
begin
  inherited;
  bmp:= TBitmap.Create;
  bmp.LoadfromFile('E:\1.bmp');
  Canvas.Draw(MARGIN, MARGIN * 5, bmp);
  SendMessage(Handle, WM_NCPAINT, 0, 0);
  bmp.Free;
end;

initialization
  HintWindowClass := TIconHintX;

end.

end.
Пробовал сам, но какие-то непонятки с классом. Может не так делаю? Тут классы описываются также как и в VS C++ 6?
Еси кто поможет, буду безмерно благодарен
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 13.08.2009, 23:22   #13
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Impuls1989
Нет вот это все
Если нигде ничего не напутал, то как-то так:

Код:
class TGraphicHintWindow : THintWindow
{
 private:
  bool FActivating;
 public:
  TGraphicHintWindow(TComponent AOwner);
  void __fastcall ActivateHint(TRect &Rect, const AnsiString AHint);
  __property Caption;
 protected:
  void __fastcall Paint(void);

};

TGraphicHintWindow::TGraphicHintWindow(TComponent AOwner) : THintWindow(AOwner)
 {
  Canvas->Font->Name = "Arial";
  Canvas->Font->Style << fsBold;
  Canvas->Font->Color = clBlack;
 }

void __fastcall TGraphicHintWindow::Paint(void)
{
 TRect R;
 Graphics::TBitmap *bmp = new Graphics::TBitmap;
 R = ClientRect;
 R.Left += 2;
 R.Top += 2;

 bmp->LoadFromFile("D:\\hint.bmp");

 Canvas->Brush->Style << bsSolid;
 Canvas->Brush->Color = clSilver;
 Canvas->Pen->Color = clGray;
 Canvas->Rectangle(0,0,18,R.Bottom+1);
 Canvas->Draw(2,(R.Bottom/2) - (bmp->Height/2),bmp);

 delete bmp;

 Color = clWhite;

 Canvas->Brush->Style <<bsClear;
 Canvas->TextOutA(20,(R.Bottom/2)-(Canvas->TextHeight(Caption)/2),Caption);

}

void __fastcall TGraphicHintWindow::ActivateHint(TRect &Rect, const AnsiString AHint)
{
 FActivating = true;

 try
  {
   Caption = AHint;
   Rect.Bottom += 14;
   Rect.Right += 20;
   UpdateBoundsRect(Rect);
    if(Rect.Top + Height > Screen->DesktopHeight)
      Rect.Top = Screen->DesktopHeight - Height;
    if(Rect.Left + Width > Screen->DesktopWidth)
      Rect.Left = Screen->DesktopWidth - Width;
    if (Rect.Left < Screen->DesktopLeft)  Rect.Left = Screen->DesktopLeft;
    if (Rect.Bottom < Screen->DesktopTop) Rect.Bottom = Screen->DesktopTop;
    SetWindowPos(Handle, HWND_TOPMOST, Rect.Left, Rect.Top, Width, Height,
      SWP_SHOWWINDOW | SWP_NOACTIVATE);
   Invalidate();
  }
 __finally
  {
  FActivating = false;
  }

}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.08.2009, 23:35   #14
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А то, что в посте #12 как-то так:
Код:
class TIconHintX : THintWindow
{
  protected:
   void __fastcall Paint(void);
  public:
  TRect __fastcall CalcHintRect(int MaxWidth, const AnsiString AHint, Pointer AData);
};

TRect __fastcall TIconHintX::CalcHintRect(int MaxWidth, const AnsiString AHint, Pointer AData)
{
 TRect Res;
 Res = THintWindow::CalcHintRect(MaxWidth, AHint, AData);
 Res.Right = (AHint.Length()*5) + Application->Icon->Width;
 Res.Bottom = (Application->Icon->Height)*2;
 return Res;
}

void __fastcall TIconHintX::Paint(void)
{
 const int MARGIN=5;
 Graphics::TBitmap *bmp = new Graphics::TBitmap;
 bmp->LoadFromFile("E:\1.bmp");
 Canvas->Draw(MARGIN,MARGIN%5,bmp);
 SendMessage(Handle, WM_NCPAINT, 0, 0);
 delete bmp;
}
Вроде, ошибок нет.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.08.2009, 23:43   #15
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Если нигде ничего не напутал, то как-то так:
Да. Все скомпилилось без ошибок. Только немного ошибись с одной процедуркой:
Код:
void __fastcall ActivateHint(const TRect &Rect, const UnicodeString AHint);
Забыли конст и UnicodeString (Компилятор кричаал об опасности)
Но все равно ничего не получается. Думаю все дело вот в этих строках:
Код:
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  HintWindowClass := TGraphicHintWindow; 
  Application.ShowHint := False; 
  Application.ShowHint := True; 
end;
HintWindowClass := TGraphicHintWindow; - Вот эту строку как понимать? Я так понимаю это использовать вместо класса HintWindowClass, собственный касс? Но такая ситуация в билдере не прокатывает(((
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 14.08.2009, 00:11   #16
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Impuls1989
Забыли конст и UnicodeString (Компилятор кричаал об опасности)
Хм.. Так ведь там дальше по коду:
Код:
Rect.Bottom += 14;
Rect.Right += 20;
а константный объект изменить нельзя..

А в формкриейт походу так надо:
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 HintWindowClass = __classid(TGraphicHintWindow);
  Application->ShowHint = False;
  Application->ShowHint = True;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.08.2009, 00:16   #17
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

При таком раскладе должна возникнуть ошибка "Unresolved external...".
Исправляется так: нужно перед WinMain добавить функцию:
Код:
 void __fastcall Controls::THintWindow::NCPaint(HDC DC)
  {
    TRect R(0, 0, Width, Height);
    DrawEdge(DC, &R, BDR_RAISEDOUTER, BF_RECT);
  }
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.08.2009, 00:20   #18
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Хм.. Так ведь там дальше по коду:
Код:
Rect.Bottom += 14;
Rect.Right += 20;
а константный объект изменить нельзя..
Да, я знаю, но компилятор ругался. Пришлось создать TRect R и дальше использовать его.
Цитата:
Сообщение от Sazary Посмотреть сообщение
А в формкриейт походу так надо:
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 HintWindowClass = __classid(TGraphicHintWindow);
  Application->ShowHint = False;
  Application->ShowHint = True;
}
Хм. Пишет вот что:
Код:
[ILINK32 Error] Error: Unresolved external '__fastcall Controls::THintWindow::NCPaint(void *)' referenced from C:\USERS\IMPULS\DESKTOP\12312312\DEBUG\UNIT1.OBJ


Немножко опоздал)). Сейчас попробую
Искусственный интеллект - фигня по сравнению с естественной глупостью

Последний раз редактировалось Impuls1989; 14.08.2009 в 00:27.
Impuls1989 вне форума Ответить с цитированием
Старый 14.08.2009, 00:27   #19
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Ураааа... Все работает как я хотел. Вот для будущего поколения полный, работающий код:
Код:
class TGraphicHintWindow : THintWindow
{
private:
	bool FActivating;
public:
	TGraphicHintWindow(TComponent AOwner);
	void __fastcall ActivateHint(const TRect &Rect, const UnicodeString AHint);
  __property Caption;
protected:
	void __fastcall Paint(void);
};

 void __fastcall Controls::THintWindow::NCPaint(HDC DC)
  {
	TRect R(0, 0, Width, Height);
	DrawEdge(DC, &R, BDR_RAISEDOUTER, BF_RECT);
  }

TGraphicHintWindow::TGraphicHintWindow(TComponent AOwner) : THintWindow(AOwner)
{
  Canvas->Font->Name = "Arial";
  Canvas->Font->Style << fsBold;
  Canvas->Font->Color = clBlack;
}

void __fastcall TGraphicHintWindow::Paint(void)
{
	TRect R;
	Graphics::TBitmap *bmp = new Graphics::TBitmap;
	R = ClientRect;
	R.Left += 2;
	R.Top += 2;
	bmp->LoadFromFile("E:\\1.bmp");
		Canvas->Brush->Style << bsSolid;
		Canvas->Brush->Color = clSilver;
		Canvas->Pen->Color = clGray;
		Canvas->Rectangle(0,0,18,R.Bottom+1);
		Canvas->Draw(2,(R.Bottom/2) - (bmp->Height/2),bmp);
	delete bmp;
	Color = clWhite;
	Canvas->Brush->Style <<bsClear;
	Canvas->TextOutA(20,(R.Bottom/2)-(Canvas->TextHeight(Caption)/2),Caption);
}
void __fastcall TGraphicHintWindow::ActivateHint(const TRect &Rect, const UnicodeString AHint)
{
	FActivating = true;
 try
  {
  TRect R = Rect;
   Caption = AHint;
   R.Bottom += 200;
   R.Right += 200;
   UpdateBoundsRect(R);
	if(R.Top + Height > Screen->DesktopHeight)
	  R.Top = Screen->DesktopHeight - Height;
	if(R.Left + Width > Screen->DesktopWidth)
	  R.Left = Screen->DesktopWidth - Width;
	if (R.Left < Screen->DesktopLeft)  R.Left = Screen->DesktopLeft;
	if (R.Bottom < Screen->DesktopTop) R.Bottom = Screen->DesktopTop;
	SetWindowPos(Handle, HWND_TOPMOST, R.Left, R.Top, Width, Height,
	  SWP_SHOWWINDOW | SWP_NOACTIVATE);
   Invalidate();
  }
 __finally
  {
	FActivating = false;
  }
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  HintWindowClass = __classid(TGraphicHintWindow);
  Application->ShowHint = False;
  Application->ShowHint = True;
}
//---------------------------------------------------------------------------
Спаибо тебе Sazary огромное.
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 14.08.2009, 15:12   #20
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Не думал что можно не писать тип наследования в заголовке производного класса
Код:
class TGraphicHintWindow : public THintWindow
MaTBeu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
печать в Билдере Dimarik Общие вопросы C/C++ 5 18.07.2009 19:42
Обращение к строке в БИЛДЕРЕ Crasty Помощь студентам 1 15.05.2009 19:00
Из listBox в paintbox в Билдере slonik123 Общие вопросы C/C++ 0 09.03.2009 15:12
задача на с++ в билдере Барби Фриланс 2 16.12.2008 10:06
Вывод сообщений в Билдере Lanist Общие вопросы C/C++ 1 21.07.2008 10:05