Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.11;
Скачать: CL | DM;

Вниз

Каким способом рисуется курсор в 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
11-33084
Morthan
2002-12-05 08:21
2003.08.11
Как правильно обработать OnKeyDown?


1-33107
Fider58
2003-07-28 22:57
2003.08.11
Где лучше писать код: в обработчиках или в своих подрограммах


14-33286
XobBIT
2003-07-24 11:10
2003.08.11
В чем разница между MS Visual Studio .Net и MS Visual C++ .Net


14-33289
stone
2003-07-23 15:54
2003.08.11
Тестовое задание? Ваше мнение...


14-33348
KILLER_ABV
2003-07-25 12:46
2003.08.11
Мастера подскожите как работать с модемами.