Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-33046
victor_ch
2003-07-15 09:29
2003.08.11
Вызов хранимой процедуры в запросе


3-33052
S@shka
2003-07-18 12:13
2003.08.11
Выборка из IBase


14-33328
iXuSs
2003-07-23 00:00
2003.08.11
Почему?


1-33186
Михаил
2003-07-28 17:06
2003.08.11
Одна форма должна находиться под другой


14-33308
BOA_KAA
2003-07-24 16:36
2003.08.11
О http://www.certifications.ru/





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский