Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
Text Editors
>
Azuki
>
Forums
>
公開討議
>
行番号の右側に記号表示欄を付加するためにオーナードロー
Azuki
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Subversion
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
FrontPage
Title index
Recent changes
Communication
List of Forums
公開討議 (499)
Forums:
公開討議
(Thread #35007)
Return to Thread list
RSS
行番号の右側に記号表示欄を付加するためにオーナードロー (2014-01-29 18:09 by
C#ビギナー
#71524)
Reply
「デバッグ機能を実装」 行番号の右側に記号表示欄を付加するためにオーナードローさせました、つまづいた部分とコードを載せておきます。
①つまづいた部分
LineDrawn()内で直画面に直接レンダリングしても表示されない、ソースを追いかけてみると、AzukiControl内のPaintでは_MemBMP_に描画し、g.EndPaintで画面にBitBltコピーしている、したがって、画面に直接描画しても無意味だと判明。
(Sgry.Azuki.IGraphics)e.Graphicsを使って描画してOKだった。
②コード
private void azkPGM_LineDrawn(object sender, Sgry.Azuki.LineDrawEventArgs e)
{
Sgry.Azuki.IGraphics ig = (Sgry.Azuki.IGraphics)e.Graphics;
Sgry.Azuki.IView iv = ((AzukiControl)sender).View;
//行番号末尾にマーク表示をさせるためにオーナードロー
//行番号エリアの文字色、背景色を取得
Color lnBackColor = iv.ColorScheme.LineNumberBack;
Color lnForeColor = iv.ColorScheme.LineNumberFore;
int lno = e.LineIndex + 1;
string lnText = lno.ToString();
Point lnAreaTopLeft = e.Position;
lnAreaTopLeft.X = iv.LineNumberAreaRectangle.X;
Point TextHeadPos = lnAreaTopLeft;
int lnAreaPadding = 2;
int lnMarkSize = 7, lnMarkPadding = 1;
int lnTextLength = ig.MeasureText(lnText).Width;
TextHeadPos.X = iv.DirtBarRectangle.Left
- lnTextLength
- lnAreaPadding
- lnMarkSize
- lnMarkPadding;
Point lnMarkTopLeft = lnAreaTopLeft;
lnMarkTopLeft.X = iv.DirtBarRectangle.Left - lnMarkSize + lnMarkPadding;
//現在行の背景描画
ig.BackColor = lnBackColor;
ig.FillRectangle(lnAreaTopLeft.X, lnAreaTopLeft.Y,
iv.LineNumAreaWidth, iv.LineHeight); //行番号領域
//lnMarkの描画
ig.BackColor = Color.FromArgb(180, 0, 15); //赤
ig.FillRectangle(lnMarkTopLeft.X, lnMarkTopLeft.Y,
lnMarkSize, iv.LineHeight); //lnMark
//番号を描画
ig.DrawText(lnText, ref TextHeadPos, lnForeColor); //行番号
}
}
Reply to #71524
×
Subject
Body
Reply To Message #71524 > > > 「デバッグ機能を実装」 行番号の右側に記号表示欄を付加するためにオーナードローさせました、つまづいた部分とコードを載せておきます。 > > ①つまづいた部分 > LineDrawn()内で直画面に直接レンダリングしても表示されない、ソースを追いかけてみると、AzukiControl内のPaintでは_MemBMP_に描画し、g.EndPaintで画面にBitBltコピーしている、したがって、画面に直接描画しても無意味だと判明。 > (Sgry.Azuki.IGraphics)e.Graphicsを使って描画してOKだった。 > > ②コード > private void azkPGM_LineDrawn(object sender, Sgry.Azuki.LineDrawEventArgs e) > { > Sgry.Azuki.IGraphics ig = (Sgry.Azuki.IGraphics)e.Graphics; > Sgry.Azuki.IView iv = ((AzukiControl)sender).View; > > //行番号末尾にマーク表示をさせるためにオーナードロー > > //行番号エリアの文字色、背景色を取得 > Color lnBackColor = iv.ColorScheme.LineNumberBack; > Color lnForeColor = iv.ColorScheme.LineNumberFore; > > int lno = e.LineIndex + 1; > string lnText = lno.ToString(); > > Point lnAreaTopLeft = e.Position; > lnAreaTopLeft.X = iv.LineNumberAreaRectangle.X; > > Point TextHeadPos = lnAreaTopLeft; > > int lnAreaPadding = 2; > int lnMarkSize = 7, lnMarkPadding = 1; > int lnTextLength = ig.MeasureText(lnText).Width; > > TextHeadPos.X = iv.DirtBarRectangle.Left > - lnTextLength > - lnAreaPadding > - lnMarkSize > - lnMarkPadding; > > Point lnMarkTopLeft = lnAreaTopLeft; > lnMarkTopLeft.X = iv.DirtBarRectangle.Left - lnMarkSize + lnMarkPadding; > > //現在行の背景描画 > ig.BackColor = lnBackColor; > ig.FillRectangle(lnAreaTopLeft.X, lnAreaTopLeft.Y, > iv.LineNumAreaWidth, iv.LineHeight); //行番号領域 > > //lnMarkの描画 > ig.BackColor = Color.FromArgb(180, 0, 15); //赤 > ig.FillRectangle(lnMarkTopLeft.X, lnMarkTopLeft.Y, > lnMarkSize, iv.LineHeight); //lnMark > > //番号を描画 > ig.DrawText(lnText, ref TextHeadPos, lnForeColor); //行番号 > } > }
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel