Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
ВнизКаким способом рисуется курсор в TWinControl ах? Найти похожие ветки
← →
chs2r (2003-07-29 12:41) [0]Каким способом рисуется курсор в TWinControl"ах?
я пробовал MoveToEx() LineTo(), но это вроде не то...
"они" же вроде через XOR делают, чтоб текст не затирался полностью
если непонятен вопрос, пож уточните
← →
Zergling (2003-07-29 12:43) [1]Вопрос действительно не понятен. Зачем курсор рисовать. Может имеется ввиду смена курсора у мыши.
← →
VAleksey (2003-07-29 12:47) [2]SetCaretPos ?
← →
VAleksey (2003-07-29 12:48) [3]
> VAleksey © (29.07.03 12:47)
Имеется в виду положение каретки в тексте.
ЗЫ
Или надо курсор мыши рисовать?
← →
Zergling (2003-07-29 12:55) [4]Вот я спрашиваю зачем курсор рисовать. У человека мыши нет, или до меня чего не доходит?
← →
chs2r (2003-07-29 14:19) [5]ВОТ ПОЛНЫЙ КОД МОДУЛЯ :)))
unit UMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, ToolWin, Menus, StdCtrls;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Main1: TMenuItem;
ToolBar1: TToolBar;
Panel1: TPanel;
StatusBar1: TStatusBar;
SB1: TScrollBar;
SB2: TScrollBar;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Main1Click(Sender: TObject);
procedure SB1Change(Sender: TObject);
procedure SB2Change(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
r:TRECT;
VSTextBegin,VSTextEnd:integer;
HPosition:integer;
File1:hFile;
FName:String;
Font1: tagLOGFONT;
HF1:HFONT;
SCount,SMaxLen:Integer;
Buff:Array[0..65536] of char;
HP1:HPEN;
DC:HDC;
EditWindow : TWinControl;
Form1: TForm1;
implementation
{$R *.dfm}
PROCEDURE REDRAWVAREA;
var
SLen:integer;
PStr:integer;
i:integer;
ht,wt:integer;
SCount:integer;
begin
ht:=EditWindow.Height div 12; //12-FontHe
wt:=EditWindow.Width div 9; //9- FontW
Form1.SB1.PageSize:=ht;
Form1.SB2.PageSize:=wt;
SLen:=0;
PStr:=0;
i:=VSTextBegin;
SCount:=0;
while SCount<ht do
begin
if Buff[i]=#13 then SCount:=Scount+1;
i:=i+1;
if Buff[i]=#0 then break;
end;
VSTextEnd:=i;
//clearscreen
FillRect(DC,r,EditWindow.Brush.Handle);
// HPosition
r:=rect(-HPosition*9,0,EditWindow.Width+HPosition*9,500);// где 9-ширина шрифта
drawText(DC,buff+VStextbegin,i-VSTextBegin,r,DT_LEFT);
end;
//;===============================================================================
далее
← →
chs2r (2003-07-29 14:20) [6]procedure SCountCalc;
var i:integer;
begin
SCount:=1;
for i:=0 to 65535 do
begin
if Buff[i]=#13 then SCount:=SCount+1;
if Buff[i]=#0 then break;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
//------------------------------------------------------------------------------
// INIT VARIABLES
VSTextBegin:=0; //номер в буфере первого видимого на экране символа
HPosition:=0;
//------------------------------------------------------------------------------
//SetLength(Buff,65536);
s:="fdghfgh"+#0;
EditWindow:=TWinControl.Create(Self);
//DC:=getDC(Desktop.hwnd);
EditWindow.ParentWindow:=Panel1.Handle;
Form1.InsertControl(EditWindow);
EditWindow.Visible:=true;
EditWindow.Enabled:=true;
EditWindow.Top:=1;
EditWindow.Left:=1;
EditWindow.Height:=Panel1.Height-22;
EditWindow.Width:=Panel1.Width-22;
//EditWindow.Align:=alTop;
EditWindow.Brush.Color:=clWhite;
EditWindow.Cursor:=crIBeam;
SendMessage(EditWindow.Handle,WM_SETTEXT,0,integer(pchar(S)));
SB1.Left:=EditWindow.Width+EditWindow.Left;
SB1.Height:=EditWindow.Height;
SB1.Top:=EditWindow.Top;
SB2.Left:=EditWindow.Left;
SB2.Width:=EditWindow.Width;
SB2.Top:=EditWindow.Top+EditWindow.Height;
end;
далее
← →
chs2r (2003-07-29 14:24) [7]procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//EditWindow.Free;
end;
procedure TForm1.Main1Click(Sender: TObject);
var
pATHtO:STRING;
Filelen:DWORD;
tmp:DWORD;
begin
PathTo:=ExtractFilePath(ParamStr(0));
FName:=PathTo+"test.txt";
{assignfile(file1,FName);
reset(File1);
blockread(file1,Buff,FileSize(File1));
label1.Caption:=inttostr(FileSize(File1));
closefile(file1);}
file1:=CreateFile(pchar(FName),GENERIC_READ,0,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
IF file1 = 0 then MessageBox(0,"Не могу открыть файл.","ошибка!",0);
FileLen:=GetFileSize(file1,0);
//label1.Caption:=inttostr(FileLen);
ReadFile(file1,Buff,FileLen,tmp,nil);
CloseHandle(file1);
EditWindow.SetFocus;
EditWindow.ShowHint:=true;
EditWindow.SetTextBuf(PChar("sdfsdf"));
EditWindow.Update;
DC:=GetDC(EditWindow.Handle);
r:=Rect(0,0,500,500);
Font1.lfHeight:=12;
Font1.lfWidth:=8;
Font1.lfEscapement:=0;
Font1.lfOrientation:=0;
Font1.lfWeight:=FW_EXTRALIGHT;
Font1.lfItalic:=0;
Font1.lfUnderline:=0;
Font1.lfStrikeOut:=0;
Font1.lfOutPrecision:=0;
Font1.lfCharSet:=ANSI_CHARSET;
Font1.lfClipPrecision:=0;
Font1.lfQuality:=2;
Font1.lfPitchAndFamily:=0;
Font1.lfFaceName:="gost type b";
HP1:=CreatePen(PS_SOLID,1,clGreen);
// EditWindow.Brush.Color:=clGreen;
HF1:=CreateFontIndirect(Font1);
if HF1=0 then ShowMessage("sadfsdfg");
SelectObject(DC,HF1);
//SelectObject(DC,HP1);
SETTEXTCOLOR(DC,$0);
SETBKCOLOR(DC,clWhite);
//DRawText(DC,buff{pChar("dfgdfg")},38,r,DT_LEFT);
SCountCalc;
SB1.Max:=SCount;
REDRAWVAREA;
end;
procedure TForm1.SB1Change(Sender: TObject);
var i:integer;
Pscroll:integer;
SCV:integer;
begin
PScroll:=SB1.Position;
i:=0;
SCV:=0;
while SCV<Pscroll do
begin
if Buff[i]=#10 then SCV:=SCV+1;
if Buff[i]=#0 then break;
i:=i+1;
end;
VSTextBegin:=i;
REDRAWVAREA;
end;
procedure TForm1.SB2Change(Sender: TObject);
begin
//hgfjhgfj
HPosition:=Sb2.Position;
REDRAWVAREA;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
EditWindow.Height:=Panel1.Height-22;
EditWindow.Width:=Panel1.Width-22;
SB1.Left:=EditWindow.Width+EditWindow.Left;
SB1.Height:=EditWindow.Height;
SB1.Top:=EditWindow.Top;
SB2.Left:=EditWindow.Left;
SB2.Width:=EditWindow.Width;
SB2.Top:=EditWindow.Top+EditWindow.Height;
REDRAWVAREA;
end;
end.
← →
chs2r (2003-07-29 14:28) [8]если не лень или интересно разобраться в коде :))))
только не спрашивайте зачем мне все это
будем считать для тренировки))
← →
chs2r (2003-07-29 15:08) [9]я соэдаю что-то вроде своего Memo из WinControl"a
читаю файл в буфер, вывожу на экран, теперь хочу редактировать
как редактировать-сам разберусь, но как курсор отображать?
код рабочий полностью :)
← →
chs2r (2003-07-29 16:08) [10]неужели никто не разберет код?
или не хотите
мастера! вопрос всего-то в том, как нарисовать линию в режиме XOR
movetoex(cursorX,cursorY,nil);
lineto(cursorX,cursorY+12);
по таймеру я меняю SelectObject(DC,HP1);//HP1:HPEN (ну там CreatePen() раньше создаю 2 пера HP1 и HP2, белое и черное...) да что еще сказать?
но нужен XOR чтобы текст не затирался
как например в том же Делфи, будь она неладна:))
← →
chs2r (2003-07-29 16:09) [11]неужели никто не разберет код?
или не хотите
мастера! вопрос всего-то в том, как нарисовать линию в режиме XOR
movetoex(cursorX,cursorY,nil);
lineto(cursorX,cursorY+12);
по таймеру я меняю SelectObject(DC,HP1);//HP1:HPEN (ну там CreatePen() раньше создаю 2 пера HP1 и HP2, белое и черное...)
в приведенном коде этого нет, поскольку все равно работает не так как мне надо
нужен XOR чтобы текст не затирался
как например в том же Делфи, будь она неладна:))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c