rvlokven
asked on
Displaying text with an angle
Id like to display text on a canvas in a certain angle with VCL (not MFC). I've looked around and all i can find is just real big functions and loads of code.
Is there a simple way to display the way i want to?
tnx all
Is there a simple way to display the way i want to?
tnx all
See the Windows SDK docs section titled:
Rotating Lines of Text
But the relevant portion of the code is quite simple:
// Draw the string 36 times, rotating 10 degrees
// counter-clockwise each time.
for (angle = 0; angle < 3600; angle += 100)
{
plf->lfEscapement = angle;
hfnt = CreateFontIndirect(plf);
hfntPrev = SelectObject(hdc, hfnt);
TextOut(hdc, rc.right / 2, rc.bottom / 2,
lpszRotate, lstrlen(lpszRotate));
SelectObject(hdc, hfntPrev);
DeleteObject(hfnt);
}
Rotating Lines of Text
But the relevant portion of the code is quite simple:
// Draw the string 36 times, rotating 10 degrees
// counter-clockwise each time.
for (angle = 0; angle < 3600; angle += 100)
{
plf->lfEscapement = angle;
hfnt = CreateFontIndirect(plf);
hfntPrev = SelectObject(hdc, hfnt);
TextOut(hdc, rc.right / 2, rc.bottom / 2,
lpszRotate, lstrlen(lpszRotate));
SelectObject(hdc, hfntPrev);
DeleteObject(hfnt);
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Why would a Delphi example be useful in the C++ topic area? Just asking....
Because the question was how to do this using VCL, meaning that he is using Borland C++ Builder, which is based on the exact same VCL as Delphi. The beauty of this is that I can take Delphi code and plug into BCB directly. And BCB code is usually easily adapted to Delphi, as well. That is why, though an ardent Delphian, I also have BCB code examples on my website...www.drdelphi.com (shameless plug).
Good luck!!
Good luck!!
I guess I'm not sure what VCL is. But in any case, this is really not a C++ or Delphi question at all but rather more suited to the Windows Programming topic.
VCL is an acronym for "Visual Component Library"... Borland's answer to MFC (Microsoft Foundation Classes). Every object in BCB and Delphi is ultimately derived from the VCL.As for whether this is the right area for the question... I am inclined to think that this is. rvlokven
is looking for a VCL C++ solution to his/her quaestion. Windows Programming is much too general for this. I mean, a PowerBuilder(or any other tool) solution (if one even exists), isn't going to do him any good , would it?
Good luck!!
is looking for a VCL C++ solution to his/her quaestion. Windows Programming is much too general for this. I mean, a PowerBuilder(or any other tool) solution (if one even exists), isn't going to do him any good , would it?
Good luck!!
heres what I use from a label component:
LOGFONT LogRec;
GetObject(Font->Handle,siz eof(LogRec ),&LogRec) ;
LogRec.lfEscapement = 900;//90% angle
LogRec.lfOrientation = 900;
Canvas->Font->Handle=Creat eFontIndir ect(&LogRe c);
//Writes a string on the canvas, starting at the point (X,Y), and then updates the PenPos to the end of the string.
//void __fastcall TextOut(int X, int Y, const System::AnsiString Text);
Canvas->TextOut(0,w,Captio n);
which is same as DrDelphi but in C++ Builder
LOGFONT LogRec;
GetObject(Font->Handle,siz
LogRec.lfEscapement = 900;//90% angle
LogRec.lfOrientation = 900;
Canvas->Font->Handle=Creat
//Writes a string on the canvas, starting at the point (X,Y), and then updates the PenPos to the end of the string.
//void __fastcall TextOut(int X, int Y, const System::AnsiString Text);
Canvas->TextOut(0,w,Captio
which is same as DrDelphi but in C++ Builder
Simplest way is to call the windows CreateFontIndirect function and set the Font->Handle to this.
If you're going to do it alot then create a descendant of TFont which has an Escapement/Orientation property so you can easily create angled fonts. Then you can just pass the handle over and not worry each time about creating the font structure etc etc.