Thread: [Notes2-team] Uma =?ISO-8859-1?Q?=FAltima_id=E9ia=2C_status=2C_entrevist?= =?ISO-8859-1?Q?a?=
Brought to you by:
andersonrb
|
From: Anderson R. B. <no...@ig...> - 2003-12-01 16:50:57
|
*1. Uma =FAltima id=E9ia*
Que tal se d=E9ssemos aos usu=E1rios um modo de acessar a biblioteca
atrav=E9s do teclado?! Quando voc=EA est=E1 programando o melhor =E9
poder usar teclas de atalho ou algo semelhante...
Estava pensando em fundir a biblioteca com o conceito de templates do=20
Delphi.
Ou seja. O usu=E1rio poderia digitar o nome do item da biblioteca que=20
quer inserir
e dar Ctrl+J para inserir o c=F3digo (ou ver uma lista de op=E7=F5es).
por exemplo:
for<CRTRL+J> inseriria:
for () {
}
numa linguagem como php, c, etc.
*2. Status*
O Jonas conseguiu grandes avan=E7os durante o fim de semana
e acho que a classe de pesquisa dever=E1 ficar pronta logo. Tamb=E9m
avancei um monte, mas fui parado por uns bugs, hehehehh...
Naum sei o que acontecue com o Joelson, mas espero que ele
reaparessa logo. Estou esperando not=EDcias do Daniel tamb=E9m...
Dentro de uma semaninha ou duas deveremos ter algo "compil=E1vel"
para mostrar...
*3. Entrevista*
Vou dar uma entrevista para o site do canal #HTML no pr=F3ximo
domingo. Eu naum me acho importante o suficiente para ser entrevistado
(naum sou nada perto dos caras que foram entrevistados nas outras
vezes) por=E9m vou dar a entrevista, j=E1 que pode ser uma boa divulga=E7=
=E3o
para o Notes...
Era istio!
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
|
|
From: Daniel R. <dan...@ya...> - 2003-12-01 17:35:12
|
Anderson,
Por aqui vou apanhando ainda daquela fun=E7=E3o que passei pra lista de =
colocar texto no clipboard... eu nem cheguei a testar aquele c=F3digo =
incluindo a unit Clipbrd, pq ela =E9 MUITO grande e est=E1 fora de =
cogita=E7=E3o... aguardo um apoio dos meus amiguinhos pra resolver =
essa...=20
Quanto =E0s fun=E7=F5es do ShellExt ainda n=E3o implementadas no =
programa em si, coloca elas como disabled s=F3 pra dar um gostinho do =
que esta por vir, ou simplesmente oculta?
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento.
----- Original Message -----=20
From: Anderson R. Barbieri=20
To: not...@li...=20
Sent: Monday, December 01, 2003 2:58 PM
Subject: [Notes2-team] Uma =FAltima id=E9ia, status, entrevista
1. Uma =FAltima id=E9ia
Que tal se d=E9ssemos aos usu=E1rios um modo de acessar a biblioteca
atrav=E9s do teclado?! Quando voc=EA est=E1 programando o melhor =E9
poder usar teclas de atalho ou algo semelhante...=20
Estava pensando em fundir a biblioteca com o conceito de templates do =
Delphi.
Ou seja. O usu=E1rio poderia digitar o nome do item da biblioteca que =
quer inserir
e dar Ctrl+J para inserir o c=F3digo (ou ver uma lista de op=E7=F5es).
por exemplo:
for<CRTRL+J> inseriria:
for () {
}
numa linguagem como php, c, etc.
2. Status
O Jonas conseguiu grandes avan=E7os durante o fim de semana
e acho que a classe de pesquisa dever=E1 ficar pronta logo. Tamb=E9m
avancei um monte, mas fui parado por uns bugs, hehehehh...
Naum sei o que acontecue com o Joelson, mas espero que ele
reaparessa logo. Estou esperando not=EDcias do Daniel tamb=E9m...
Dentro de uma semaninha ou duas deveremos ter algo "compil=E1vel"
para mostrar...
3. Entrevista
Vou dar uma entrevista para o site do canal #HTML no pr=F3ximo
domingo. Eu naum me acho importante o suficiente para ser entrevistado
(naum sou nada perto dos caras que foram entrevistados nas outras
vezes) por=E9m vou dar a entrevista, j=E1 que pode ser uma boa =
divulga=E7=E3o
para o Notes...=20
Era istio!
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
---Verifica=E7=E3o de V=EDrus executada:Nenhum v=EDrus =
encontrado!Sudeste Seguran=E7a e Transporte de ValoresDepartamento de =
Tecnologia e Informa=E7=F5esChecked by AVG anti-virus system =
(http://www.grisoft.com).Version: 6.0.545 / Virus Database: 339 - =
Release Date: 27/11/2003 |
|
From: Anderson R. B. <no...@ig...> - 2003-12-02 03:24:08
|
E a=ED Daniel?
Tu t=E1 apanhando a=ED tb=E9m, eu to apanhando com meus bugs aqui, hehehh=
ehe
Bom, manda o fonte iteiro para a lista e diz que t=E1 precisando de ajuda=
.
Da outra vez fosse mandou s=F3 a fun=E7=E3o. Me mande tudo para que eu po=
ssa
testar a coisa por mim mesmo... vou ver se encontro o problema.
Hummm... e se voc=EA quiser/puder pegar alguma daquelas coisas
da lsita de tarefa, fique =E0 vontade. Tem pouca gente trabalhando
de verdade (eu, tu, o jonas e o joelson) no desenvolvimento.
Ent=E3o qualquer ajuda =E9 mt bem vinda, hehehehhe
Ah! Quanto ao que tu perguntou da ShellExtension eu queria exatamente
te pedir algo para mostrarmos. Acho ent=E3o que deixa os itens desabilita=
dos,
para saberem que via ter o item. Est=E1 na hora de mostrarmos alguma cois=
a,
em parte por que =E9 legal ver o resultado do que estamos fazendo, mas ma=
is
ainda por que o pessoal da docmenta=E7=E3o naum est=E1 conseguindo acompa=
nhar
o pique da equipe de desenvolvimento e acho que facilitaria para eles se=20
eles
pudessem ver o que j=E1 est=E1 pronto...
Mande o c=F3digo! Vamos can=E7ar os bugs, hehehehhe
Ab.
Anderson
Daniel Roma wrote:
> Anderson,
> =20
> Por aqui vou apanhando ainda daquela fun=E7=E3o que passei pra lista de=
=20
> colocar texto no clipboard... eu nem cheguei a testar aquele c=F3digo=20
> incluindo a unit Clipbrd, pq ela =E9 MUITO grande e est=E1 fora de=20
> cogita=E7=E3o... aguardo um apoio dos meus amiguinhos pra resolver essa=
...
> =20
> Quanto =E0s fun=E7=F5es do ShellExt ainda n=E3o implementadas no progra=
ma em=20
> si, coloca elas como disabled s=F3 pra dar um gostinho do que esta por=20
> vir, ou simplesmente oculta?
> =20
> =20
> []=B4s
> =20
> Daniel Roma
> #Equipe do Notes - Desenvolvimento.
>
> ----- Original Message -----
> *From:* Anderson R. Barbieri <mailto:no...@ig...>
> *To:* not...@li...
> <mailto:not...@li...>
> *Sent:* Monday, December 01, 2003 2:58 PM
> *Subject:* [Notes2-team] Uma =FAltima id=E9ia, status, entrevista
>
>
> *1. Uma =FAltima id=E9ia*
> Que tal se d=E9ssemos aos usu=E1rios um modo de acessar a bibliotec=
a
> atrav=E9s do teclado?! Quando voc=EA est=E1 programando o melhor =E9
> poder usar teclas de atalho ou algo semelhante...
>
> Estava pensando em fundir a biblioteca com o conceito de templates
> do Delphi.
> Ou seja. O usu=E1rio poderia digitar o nome do item da biblioteca
> que quer inserir
> e dar Ctrl+J para inserir o c=F3digo (ou ver uma lista de op=E7=F5e=
s).
> por exemplo:
>
> for<CRTRL+J> inseriria:
>
> for () {
> }
>
> numa linguagem como php, c, etc.
>
>
> *2. Status*
> O Jonas conseguiu grandes avan=E7os durante o fim de semana
> e acho que a classe de pesquisa dever=E1 ficar pronta logo. Tamb=E9=
m
> avancei um monte, mas fui parado por uns bugs, hehehehh...
> Naum sei o que acontecue com o Joelson, mas espero que ele
> reaparessa logo. Estou esperando not=EDcias do Daniel tamb=E9m...
> Dentro de uma semaninha ou duas deveremos ter algo "compil=E1vel"
> para mostrar...
>
> *3. Entrevista*
> Vou dar uma entrevista para o site do canal #HTML no pr=F3ximo
> domingo. Eu naum me acho importante o suficiente para ser entrevist=
ado
> (naum sou nada perto dos caras que foram entrevistados nas outras
> vezes) por=E9m vou dar a entrevista, j=E1 que pode ser uma boa divu=
lga=E7=E3o
> para o Notes...
>
> Era istio!
>
>--=20
>Anderson Rodrigues Barbieri
>--------------------------------------------
>#Equipe do Notes - Coordenador/Desenvolvedor
>
>{ TAndInfo }
>ICQ #149391850 / no...@ig...
>Notes - http://notes.codigolivre.org.br
>NotesDev - http://notes2.sf.net/dev
>F=F3rum - http://notes2.sf.net/forum
>
>---
>Verifica=E7=E3o de V=EDrus executada:
>Nenhum v=EDrus encontrado!
>Sudeste Seguran=E7a e Transporte de Valores
>Departamento de Tecnologia e Informa=E7=F5es
>Checked by AVG anti-virus system (http://www.grisoft.com).
>Version: 6.0.545 / Virus Database: 339 - Release Date: 27/11/2003
>
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
|
|
From: Daniel R. <dan...@ya...> - 2003-12-02 10:26:26
|
Segue o c=F3digo completo do Shell at=E9 o momento, mas queria que =
voc=EAs conseguissem botar a fun=E7=E3o pra trabalhar sozinha hehehe... =
ela tem que colocar texto na =E1rea de transfer=EAncia independente do =
restante do c=F3digo.
Vale lembrar mais uma vez: n=E3o pode usar a unit Clipbrd.. :)
Any help, please!
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento
unit uNotesShellExt;
interface
uses
Windows, ActiveX, ComObj, ShlObj, Graphics, Classes;
type
TContextMenu =3D class(TComObject, IShellExtInit, IContextMenu)
private
fFileName: array[0..MAX_PATH] of Char;
NotesIcon: TBitMap;
OpenIcon: TBitMap;
WWWIcon: TBitMap;
CopyIcon: TBitMap;
SaveIcon: TBitMap;
MakeIcon: TBitMap;
FavIcon: TBitMap;
AboutBitMap: TBitMap;
protected
//Inicializa=E7=E3o do Shell Extension
function IShellExtInit.Initialize =3D SEIInitialize;
function SEIInitialize(pidlFolder: PItemIDList; lpdobj: =
IDataObject;hKeyProgID: HKEY): HResult; stdcall;
//Menu de Contexto do Explorer
function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, =
idCmdLast,uFlags: UINT): HResult; stdcall;
function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; =
stdcall;
function GetCommandString(idCmd, uType: UINT; pwReserved: =
PUINT;pszName: LPSTR; cchMax: UINT): HResult; stdcall;
end;
const
Class_ContextMenu: TGUID =3D '{173A3318-80D5-41A2-9CC6-DABEB299181D}';
implementation
{$R NotesShell.res}
uses ComServ, SysUtils, ShellApi, Registry;
function GetNotesPath(aFile:String): string;
// Esta fun=E7=E3o retorna o caminho para o execut=E1vel do Notes... =E9 =
um dos pontos
// onde =E9 necess=E1rio usar o Registro do Windows
var
Reg: TRegistry;
begin
Reg :=3D TRegistry.Create;
try
with Reg do begin
RootKey :=3D HKEY_LOCAL_MACHINE;
if OpenKey('\SOFTWARE\Equipe do Notes\NotesSE2004', False) then =
//Segundo a chave sugerida pelo Anderson
Result :=3D ExpandFileName(ReadString('RootDir') + aFile) // =
Retorna o path mais o nome do arquivo passado como par=E2metro
else
Result :=3D ''; //retorna vazio caso a chave n=E3o exista
end;
if AnsiPos(' ', Result) <> 0 then // caso existam espa=E7os no =
path...
Result :=3D ExtractShortPathName(Result); // Converte o resultado =
para o formato 8.3 para manter compatibilidade com qquer sistema
finally
Reg.Free;
end;
end;
//fun=E7=E3o que carrega um BitMap a partir do Resource, redimensionando =
pro sistema do usu=E1rio
procedure fLoadImage(out aBitMap: TBitMap;aResourceName:String);
var tmpBitMap: TBitMap;
userBitMapSize: integer;
begin
if aBitMap =3D nil then
begin
tmpBitMap :=3D TBitmap.Create;
userBitMapSize :=3D GetSystemMetrics(SM_CXMENUCHECK);
try
tmpBitMap.LoadFromResourceName(hInstance,aResourceName);
aBitMap :=3D TBitmap.Create;
aBitMap.Width :=3D userBitMapSize;
aBitMap.Height :=3D userBitMapSize;
=
aBitMap.Canvas.StretchDraw(rect(0,0,userBitMapSize,userBitMapSize),tmpBit=
Map);
finally
tmpBitMap.Free;
end;
end;
end;
//%$&=A8%#&=A8% de fun=E7=E3o que n=E3o funciona!!!
procedure SetClipboardText(aText:PChar);
var Data: THandle;
DataPtr: Pointer;
begin
OpenClipboard(GetDesktopWindow);
try
Data :=3D GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, length(aText));
try
DataPtr :=3D GlobalLock(Data);
try
Move(aText^, DataPtr^, length(aText));
EmptyClipboard;
SetClipboardData(CF_TEXT, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
CloseClipboard;
end;
end;
function TContextMenu.SEIInitialize(pidlFolder: PItemIDList; lpdobj: =
IDataObject;
hKeyProgID: HKEY): HResult;
var
StgMedium: TStgMedium;
FormatEtc: TFormatEtc;
begin
if (lpdobj =3D nil) then begin
Result :=3D E_INVALIDARG;
Exit;
end;
with FormatEtc do begin
cfFormat :=3D CF_HDROP;
ptd :=3D nil;
dwAspect :=3D DVASPECT_CONTENT;
lindex :=3D -1;
tymed :=3D TYMED_HGLOBAL;
end;
fLoadImage(NotesIcon,'NotesIcon');
fLoadImage(OpenIcon,'OpenIcon');
fLoadImage(WWWIcon,'WWWIcon');
fLoadImage(CopyIcon,'CopyIcon');
fLoadImage(SaveIcon,'SaveIcon');
fLoadImage(MakeIcon,'MakeIcon');
fLoadImage(FavIcon,'FavIcon');
// Abaixo, =E9 criado um BitMap para ser colocado no meio do menu...
// fiz esse trecho mais para demonstrar o que d=E1 pra fazer, n=E3o =
sei se vai
// ser usado.
if AboutBitMap =3D nil then
begin
AboutBitMap :=3D TBitmap.Create;
AboutBitMap.Width :=3D 165;
AboutBitMap.Height :=3D 15;
AboutBitMap.Canvas.Brush.Color :=3D clCream;
AboutBitMap.Canvas.Pen.Color :=3D clBlue;
AboutBitMap.Canvas.Rectangle(0,0,165,15);
AboutBitMap.Canvas.Font.Color :=3D clNavy;
AboutBitMap.Canvas.TextOut(7,1,'HomePage do Notes SE 2004');
end;
Result :=3D lpdobj.GetData(FormatEtc, StgMedium);
if Failed(Result) then
Exit;
// Os c=F3digos que eu estudei permitem o tratamento de apenas um =
arquivo por vez.
// Assim, caso s=F3 um arquivo esteja selecionado, ele passa o nome do =
mesmo para fFileName
// Caso Contr=E1rio, ele nem chega a chamar o pop-up do Notes.
if (DragQueryFile(StgMedium.hGlobal, $FFFFFFFF, nil, 0) =3D 1) then =
begin
DragQueryFile(StgMedium.hGlobal, 0, fFileName, SizeOf(fFileName));
Result :=3D NOERROR;
end
else begin
FFileName[0] :=3D #0;
Result :=3D E_FAIL;
end;
ReleaseStgMedium(StgMedium);
end;
function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu, =
idCmdFirst,
idCmdLast, uFlags: UINT): HResult;
var mySub: HMENU;
idCmd: Cardinal;
begin
Result :=3D 0;
if ((uFlags and $0000000F) =3D CMF_NORMAL) or ((uFlags and =
CMF_EXPLORE) <> 0) then
begin
idCmd :=3D idCmdFirst; //inicializa o identificador de comando
//Editar com o Notes - Posi=E7=E3o inicial (IndexMenu)
InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION,idCmd, =
'Editar com o Notes');
if OpenIcon <> nil then
=
SetMenuItemBitmaps(Menu,indexMenu,MF_BYPOSITION,OpenIcon.Handle,OpenIcon.=
Handle);
mySub :=3D CreatePopupMenu; //Cria o menu principal, que abriga os =
outros.
// Posi=E7=E3o: IndexMenu + 1
InsertMenu(Menu, indexMenu+1, MF_STRING or MF_BYPOSITION or =
MF_POPUP, mySub, 'Notes SE 2004');
if NotesIcon <> nil then
=
SetMenuItemBitmaps(Menu,indexMenu+1,MF_BYPOSITION,NotesIcon.Handle,NotesI=
con.Handle); //Coloca o =EDcone do notes ao lado do item
//O que est=E1 dentro do mySub
begin
//Usar como Template do Notes
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Usar como Template do Notes');
if OpenIcon <> nil then
SetMenuItemBitmaps(mySub,idCmd - idCmdFirst - =
1,MF_BYPOSITION,OpenIcon.Handle,OpenIcon.Handle);
//Salvar como template do Notes
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Salvar como template do Notes');
if SaveIcon <> nil then
SetMenuItemBitmaps(mySub,idCmd - idCmdFirst - =
1,MF_BYPOSITION,SaveIcon.Handle,SaveIcon.Handle);
//-----------------Separador----------------------------
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
//Copiar conte=FAdo
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Copiar conte=FAdo');
if CopyIcon <> nil then
SetMenuItemBitmaps(mySub,idCmd - idCmdFirst - =
1,MF_BYPOSITION,CopyIcon.Handle,CopyIcon.Handle);
//Copiar nome do arquivo
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Copiar nome do arquivo');
if CopyIcon <> nil then
SetMenuItemBitmaps(mySub,idCmd - idCmdFirst - =
1,MF_BYPOSITION,CopyIcon.Handle,CopyIcon.Handle);
//Informa=E7=F5es do arquivo
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Informa=E7=F5es do arquivo');
//-----------------Separador----------------------------
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
//Compilar arquivo
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Compilar arquivo');
if MakeIcon <> nil then
SetMenuItemBitmaps(mySub,idCmd - idCmdFirst - =
1,MF_BYPOSITION,MakeIcon.Handle,MakeIcon.Handle);
//Comprimir HTML
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Comprimir HTML');
//-----------------Separador----------------------------
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
//Adicionar aos favoritos do Notes
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or =
MF_BYPOSITION,idCmd, 'Adicionar aos favoritos do Notes');
if FavIcon <> nil then
SetMenuItemBitmaps(mySub,idCmd - idCmdFirst - =
1,MF_BYPOSITION,FavIcon.Handle,FavIcon.Handle);
//-----------------Separador----------------------------
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
//HomePage do Notes
inc(idCmd);
InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_BITMAP or =
MF_BYPOSITION,idCmd, PChar(AboutBitMap.Handle));
if WWWIcon <> nil then
SetMenuItemBitmaps(mySub, idCmd - idCmdFirst - =
1,MF_BYPOSITION,WWWIcon.Handle,WWWIcon.Handle);
end;
// o valor de retorno deve ser o n=FAmero de menus que foram criados
Result :=3D idCmd - idCmdFirst + 1;
end;
end;
function TContextMenu.InvokeCommand(var lpici: TCMInvokeCommandInfo): =
HResult;
resourcestring
sPathError =3D 'Erro ao definir diret=F3rio ativo!';
var
PrevDir: string;
NotesExe: string;
cmdLine: String;
begin
Result :=3D E_FAIL;
// Certifica que =E9 o Explorer que est=E1 acessando a DLL, e n=E3o um =
aplicativo qquer
if (HiWord(Integer(lpici.lpVerb)) <> 0) then
begin
Exit;
end;
NotesExe :=3D GetNotesPath('NotesSE.exe');
if ((NotesExe =3D '') or (not FileExists(NotesExe))) then
begin
//Chamada abaixo em API, pois tirar o Dialogs.dcu economizou quase =
300kb!
MessageBox(GetDesktopWindow,'Notes n=E3o instalado corretamente!' + =
#13 + 'Tente instalar novamente por favor.','Erro de =
Instala=E7=E3o',MB_OK or MB_ICONERROR);
exit;
end;
cmdLine :=3D '';
case LoWord(Integer(lpici.lpVerb)) of
0: // "Editar com o Notes"
cmdLine :=3D NotesExe + ' "' + fFileName + '"';
1: // "Usar como Template do Notes"
cmdLine :=3D NotesExe + ' -t "' + fFileName + '"';
//2: //Salvar como template do Notes
//3: -----------------Separador----------------------------
//4: //Copiar conte=FAdo
//5: //Copiar nome do arquivo
//6: //Informa=E7=F5es do arquivo
//7: -----------------Separador----------------------------
//8: //Compilar arquivo
//9: //Comprimir HTML
//10:-----------------Separador----------------------------
//11://Adicionar aos favoritos do Notes
//12:-----------------Separador----------------------------
13: // "HomePage do Notes"
=
ShellExecute(GetDesktopWindow,nil,'http://notes.codigolivre.org.br',nil,n=
il,SW_MAXIMIZE);
end;
if cmdLine <> '' then
begin
PrevDir :=3D GetCurrentDir;
try
WinExec(PChar(cmdLine), lpici.nShow);
Result :=3D NOERROR;
finally
SetCurrentDir(PrevDir);
end;
end;
end;
function TContextMenu.GetCommandString(idCmd, uType: UINT; pwReserved: =
PUINT;
pszName: LPSTR; cchMax: UINT): HRESULT;
begin
//Essa fun=E7=E3o descreve o texto da barra de status do explorer
case idCmd of
0: // "Editar com o Notes"
begin
if (uType =3D GCS_HELPTEXT) then
StrCopy(pszName, PChar('Edita o arquivo "' + =
ExtractFileName(fFileName) + '" com o Notes SE 2004'));
Result :=3D NOERROR;
end;
1: // "Usar como Template do Notes"
begin
if (uType =3D GCS_HELPTEXT) then
StrCopy(pszName, PChar('Usa o arquivo "' + =
ExtractFileName(fFileName) + '" como template com o Notes SE 2004'));
Result :=3D NOERROR;
end;
3: // "HomePage do Notes SE 2004"
begin
if (uType =3D GCS_HELPTEXT) then
StrCopy(pszName, PChar('HomePage do Notes SE 2004'));
Result :=3D NOERROR;
end;
else
Result :=3D E_INVALIDARG;
end;
end;
type
TContextMenuFactory =3D class(TComObjectFactory)
public
procedure UpdateRegistry(Register: Boolean); override;
end;
procedure TContextMenuFactory.UpdateRegistry(Register: Boolean);
var
ClassID: string;
begin
//Registra o Menu de contexto
if Register then begin
inherited UpdateRegistry(Register);
ClassID :=3D GUIDToString(Class_ContextMenu);
CreateRegKey('*\shellex', '', '');
CreateRegKey('*\shellex\ContextMenuHandlers', '', '');
CreateRegKey('*\shellex\ContextMenuHandlers\Notes', '', ClassID);
if (Win32Platform =3D VER_PLATFORM_WIN32_NT) then
with TRegistry.Create do
try
RootKey :=3D HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell =
Extensions', True);
OpenKey('Approved', True);
WriteString(ClassID, 'Notes SE 2004 Shell Extension');
finally
Free;
end;
end
else begin
DeleteRegKey('*\shellex\ContextMenuHandlers\Notes');
DeleteRegKey('*\shellex\ContextMenuHandlers');
DeleteRegKey('*\shellex');
inherited UpdateRegistry(Register);
end;
end;
initialization
TContextMenuFactory.Create(ComServer, TContextMenu, =
Class_ContextMenu,'', 'Notes SE 2004 Shell Extension', =
ciMultiInstance,tmApartment);
end.
---
Verifica=E7=E3o de V=EDrus executada:
Nenhum v=EDrus encontrado!
Sudeste Seguran=E7a e Transporte de Valores
Departamento de Tecnologia e Informa=E7=F5es
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.545 / Virus Database: 339 - Release Date: 27/11/2003 |
|
From: Anderson R. B. <no...@ig...> - 2003-12-03 03:06:39
|
Daniel,
n=E3o consegui achar o bug. N=E3o parece ter erro nehum...
Dae fui at=E9 os newgroups da Borland (usando o maravilhoso google)
e consegui achar c=F3digo pra fazer o que tu precisa fazer (depois de mai=
s
de 50 minutos de pesquisa, mas ao menos achei):
Naum testei, mas =E9 de um membro do TeamB, ent=E3o vai funcionar :)
Anderson
{+------------------------------------------------------------
| Unit ClipUtil
|
| Version: 1.0 Created: 05/05/96, 12:56:57
| Last Modified: 05/05/96, 12:56:57
| Author : P. Below
| Project: Common Utilities
| Description:
| Routines to copy string lists and stream to and
| from the clipboard.
+------------------------------------------------------------}
Unit ClipUtil;
Interface
Uses Classes;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Implementation
Uses WinTypes, WinProcs, SysUtils, Clipbrd;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr :=3D TMemoryStream.Create;
try
S.SaveToStream(MemStr);
CopyStreamToClipboard( fmt, MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsToClipboard }
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
S.Position :=3D 0;
hMem :=3D GlobalAlloc( GHND or GMEM_DDESHARE, S.Size );
If hMem <> 0 Then Begin
pMem :=3D GlobalLock( hMem );
If pMem <> Nil Then Begin
try
S.Read( pMem^, S.Size );
S.Position :=3D 0;
finally
GlobalUnlock( hMem );
end;
Clipboard.Open;
try
Clipboard.SetAsHandle( fmt, hMem );
finally
Clipboard.Close;
end;
End { If }
Else Begin
GlobalFree( hMem );
OutOfMemoryError;
End;
End { If }
Else
OutOfMemoryError;
End; { CopyStreamToClipboard }
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr:=3D TMemoryStream.Create;
try
CopyStreamFromClipboard( fmt, MemStr );
MemStr.Position :=3D 0;
S.LoadFromStream( MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsFromClipboard }
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
hMem :=3D Clipboard.GetAsHandle( fmt );
If hMem <> 0 Then Begin
pMem :=3D GlobalLock( hMem );
If pMem <> Nil Then Begin
try
S.Write( pMem^, GlobalSize( hMem ));
S.Position :=3D 0;
finally =20
GlobalUnlock( hMem );
end; =20
End { If }
Else
raise Exception.Create(
'CopyStreamFromClipboard: could not lock global handle '+
'obtained from clipboard!');
End; { If }
End; { CopyStreamFromClipboard }
End. { Unit ClipUtil }
Daniel Roma wrote:
> Segue o c=F3digo completo do Shell at=E9 o momento, mas queria que voc=EA=
s=20
> conseguissem botar a fun=E7=E3o pra trabalhar sozinha hehehe... ela tem=
=20
> que colocar texto na =E1rea de transfer=EAncia independente do restante=
do=20
> c=F3digo.
> Vale lembrar mais uma vez: n=E3o pode usar a unit Clipbrd.. :)
> =20
> Any help, please!
> =20
> []=B4s
> =20
> Daniel Roma
> #Equipe do Notes - Desenvolvimento
> =20
> =20
> =20
> unit uNotesShellExt;
> =20
> interface
> =20
> uses
> Windows, ActiveX, ComObj, ShlObj, Graphics, Classes;
> =20
> type
> TContextMenu =3D class(TComObject, IShellExtInit, IContextMenu)
> private
> fFileName: array[0..MAX_PATH] of Char;
> NotesIcon: TBitMap;
> OpenIcon: TBitMap;
> WWWIcon: TBitMap;
> CopyIcon: TBitMap;
> SaveIcon: TBitMap;
> MakeIcon: TBitMap;
> FavIcon: TBitMap;
> AboutBitMap: TBitMap;
> protected
> //Inicializa=E7=E3o do Shell Extension
> function IShellExtInit.Initialize =3D SEIInitialize;
> function SEIInitialize(pidlFolder: PItemIDList; lpdobj:=20
> IDataObject;hKeyProgID: HKEY): HResult; stdcall;
> //Menu de Contexto do Explorer
> function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst,=20
> idCmdLast,uFlags: UINT): HResult; stdcall;
> function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;=20
> stdcall;
> function GetCommandString(idCmd, uType: UINT; pwReserved:=20
> PUINT;pszName: LPSTR; cchMax: UINT): HResult; stdcall;
> end;
> =20
> const
> Class_ContextMenu: TGUID =3D '{173A3318-80D5-41A2-9CC6-DABEB299181D}'=
;
> =20
> implementation
> =20
> {$R NotesShell.res}
> =20
>
> uses ComServ, SysUtils, ShellApi, Registry;
> =20
> function GetNotesPath(aFile:String): string;
> // Esta fun=E7=E3o retorna o caminho para o execut=E1vel do Notes... =E9=
um=20
> dos pontos
> // onde =E9 necess=E1rio usar o Registro do Windows
> var
> Reg: TRegistry;
> begin
> Reg :=3D TRegistry.Create;
> try
> with Reg do begin
> RootKey :=3D HKEY_LOCAL_MACHINE;
> =20
> if OpenKey('\SOFTWARE\Equipe do Notes\NotesSE2004', False) then=20
> //Segundo a chave sugerida pelo Anderson
> Result :=3D ExpandFileName(ReadString('RootDir') + aFile) //=20
> Retorna o path mais o nome do arquivo passado como par=E2metro
> else
> Result :=3D ''; //retorna vazio caso a chave n=E3o exista
> end;
> if AnsiPos(' ', Result) <> 0 then // caso existam espa=E7os no path=
...
> Result :=3D ExtractShortPathName(Result); // Converte o resultado=
=20
> para o formato 8.3 para manter compatibilidade com qquer sistema
> finally
> Reg.Free;
> end;
> end;
> =20
> //fun=E7=E3o que carrega um BitMap a partir do Resource, redimensionand=
o=20
> pro sistema do usu=E1rio
> procedure fLoadImage(out aBitMap: TBitMap;aResourceName:String);
> var tmpBitMap: TBitMap;
> userBitMapSize: integer;
> begin
> if aBitMap =3D nil then
> begin
> tmpBitMap :=3D TBitmap.Create;
> userBitMapSize :=3D GetSystemMetrics(SM_CXMENUCHECK);
> =20
> try
> tmpBitMap.LoadFromResourceName(hInstance,aResourceName);
> aBitMap :=3D TBitmap.Create;
> aBitMap.Width :=3D userBitMapSize;
> aBitMap.Height :=3D userBitMapSize;
> =20
> aBitMap.Canvas.StretchDraw(rect(0,0,userBitMapSize,userBitMapSize),tmpB=
itMap);
> finally
> tmpBitMap.Free;
> end;
> end;
> end;
> =20
>
> //%$&=A8%#&=A8% de fun=E7=E3o que n=E3o funciona!!!
> procedure SetClipboardText(aText:PChar);
> var Data: THandle;
> DataPtr: Pointer;
> begin
> OpenClipboard(GetDesktopWindow);
> try
> Data :=3D GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, length(aText));
> try
> DataPtr :=3D GlobalLock(Data);
> try
> Move(aText^, DataPtr^, length(aText));
> EmptyClipboard;
> SetClipboardData(CF_TEXT, Data);
> finally
> GlobalUnlock(Data);
> end;
> except
> GlobalFree(Data);
> raise;
> end;
> finally
> CloseClipboard;
> end;
> end;
> =20
> =20
> =20
>
> function TContextMenu.SEIInitialize(pidlFolder: PItemIDList; lpdobj:=20
> IDataObject;
> hKeyProgID: HKEY): HResult;
> var
> StgMedium: TStgMedium;
> FormatEtc: TFormatEtc;
> begin
> if (lpdobj =3D nil) then begin
> Result :=3D E_INVALIDARG;
> Exit;
> end;
> =20
> with FormatEtc do begin
> cfFormat :=3D CF_HDROP;
> ptd :=3D nil;
> dwAspect :=3D DVASPECT_CONTENT;
> lindex :=3D -1;
> tymed :=3D TYMED_HGLOBAL;
> end;
> =20
> fLoadImage(NotesIcon,'NotesIcon');
> fLoadImage(OpenIcon,'OpenIcon');
> fLoadImage(WWWIcon,'WWWIcon');
> fLoadImage(CopyIcon,'CopyIcon');
> fLoadImage(SaveIcon,'SaveIcon');
> fLoadImage(MakeIcon,'MakeIcon');
> fLoadImage(FavIcon,'FavIcon');
> =20
>
> // Abaixo, =E9 criado um BitMap para ser colocado no meio do menu...
> // fiz esse trecho mais para demonstrar o que d=E1 pra fazer, n=E3o s=
ei=20
> se vai
> // ser usado.
> if AboutBitMap =3D nil then
> begin
> AboutBitMap :=3D TBitmap.Create;
> AboutBitMap.Width :=3D 165;
> AboutBitMap.Height :=3D 15;
> AboutBitMap.Canvas.Brush.Color :=3D clCream;
> AboutBitMap.Canvas.Pen.Color :=3D clBlue;
> AboutBitMap.Canvas.Rectangle(0,0,165,15);
> AboutBitMap.Canvas.Font.Color :=3D clNavy;
> AboutBitMap.Canvas.TextOut(7,1,'HomePage do Notes SE 2004');
> end;
> =20
> =20
> =20
> Result :=3D lpdobj.GetData(FormatEtc, StgMedium);
> if Failed(Result) then
> Exit;
> // Os c=F3digos que eu estudei permitem o tratamento de apenas um=20
> arquivo por vez.
> // Assim, caso s=F3 um arquivo esteja selecionado, ele passa o nome d=
o=20
> mesmo para fFileName
> // Caso Contr=E1rio, ele nem chega a chamar o pop-up do Notes.
> if (DragQueryFile(StgMedium.hGlobal, $FFFFFFFF, nil, 0) =3D 1) then b=
egin
> DragQueryFile(StgMedium.hGlobal, 0, fFileName, SizeOf(fFileName));
> Result :=3D NOERROR;
> end
> else begin
> FFileName[0] :=3D #0;
> Result :=3D E_FAIL;
> end;
> ReleaseStgMedium(StgMedium);
> =20
> end;
> =20
> =20
> =20
>
> function TContextMenu.QueryContextMenu(Menu: HMENU; indexMenu, idCmdFir=
st,
> idCmdLast, uFlags: UINT): HResult;
> var mySub: HMENU;
> idCmd: Cardinal;
> begin
> Result :=3D 0;
> =20
> if ((uFlags and $0000000F) =3D CMF_NORMAL) or ((uFlags and=20
> CMF_EXPLORE) <> 0) then
> begin
> idCmd :=3D idCmdFirst; //inicializa o identificador de comando
> =20
> //Editar com o Notes - Posi=E7=E3o inicial (IndexMenu)
> InsertMenu(Menu, indexMenu, MF_STRING or MF_BYPOSITION,idCmd,=20
> 'Editar com o Notes');
> if OpenIcon <> nil then
> =20
> SetMenuItemBitmaps(Menu,indexMenu,MF_BYPOSITION,OpenIcon.Handle,OpenIco=
n.Handle);
> =20
>
> mySub :=3D CreatePopupMenu; //Cria o menu principal, que abriga os=20
> outros.
> // Posi=E7=E3o: IndexMenu + 1
> InsertMenu(Menu, indexMenu+1, MF_STRING or MF_BYPOSITION or=20
> MF_POPUP, mySub, 'Notes SE 2004');
> if NotesIcon <> nil then
> =20
> SetMenuItemBitmaps(Menu,indexMenu+1,MF_BYPOSITION,NotesIcon.Handle,Note=
sIcon.Handle);=20
> //Coloca o =EDcone do notes ao lado do item
> =20
> //O que est=E1 dentro do mySub
> begin
> =20
> //Usar como Template do Notes
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Usar como Template do Notes');
> if OpenIcon <> nil then
> SetMenuItemBitmaps(mySub,idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,OpenIcon.Handle,OpenIcon.Handle);
> =20
> //Salvar como template do Notes
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Salvar como template do Notes');
> if SaveIcon <> nil then
> SetMenuItemBitmaps(mySub,idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,SaveIcon.Handle,SaveIcon.Handle);
> =20
> //-----------------Separador----------------------------
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
> =20
>
> //Copiar conte=FAdo
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Copiar conte=FAdo');
> if CopyIcon <> nil then
> SetMenuItemBitmaps(mySub,idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,CopyIcon.Handle,CopyIcon.Handle);
> =20
> //Copiar nome do arquivo
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Copiar nome do arquivo');
> if CopyIcon <> nil then
> SetMenuItemBitmaps(mySub,idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,CopyIcon.Handle,CopyIcon.Handle);
> =20
>
> //Informa=E7=F5es do arquivo
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Informa=E7=F5es do arquivo');
> =20
>
> //-----------------Separador----------------------------
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
> =20
> //Compilar arquivo
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Compilar arquivo');
> if MakeIcon <> nil then
> SetMenuItemBitmaps(mySub,idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,MakeIcon.Handle,MakeIcon.Handle);
> =20
>
> //Comprimir HTML
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Comprimir HTML');
> =20
> //-----------------Separador----------------------------
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
> =20
> //Adicionar aos favoritos do Notes
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_STRING or=20
> MF_BYPOSITION,idCmd, 'Adicionar aos favoritos do Notes');
> if FavIcon <> nil then
> SetMenuItemBitmaps(mySub,idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,FavIcon.Handle,FavIcon.Handle);
> =20
> //-----------------Separador----------------------------
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_SEPARATOR,0,nil);
> =20
> //HomePage do Notes
> inc(idCmd);
> InsertMenu(mySub, idCmd - idCmdFirst - 1, MF_BITMAP or=20
> MF_BYPOSITION,idCmd, PChar(AboutBitMap.Handle));
> if WWWIcon <> nil then
> SetMenuItemBitmaps(mySub, idCmd - idCmdFirst -=20
> 1,MF_BYPOSITION,WWWIcon.Handle,WWWIcon.Handle);
> end;
> =20
> // o valor de retorno deve ser o n=FAmero de menus que foram criado=
s
> Result :=3D idCmd - idCmdFirst + 1;
> end;
> end;
> =20
> function TContextMenu.InvokeCommand(var lpici: TCMInvokeCommandInfo):=20
> HResult;
> resourcestring
> sPathError =3D 'Erro ao definir diret=F3rio ativo!';
> =20
> var
> PrevDir: string;
> NotesExe: string;
> cmdLine: String;
> begin
> Result :=3D E_FAIL;
> // Certifica que =E9 o Explorer que est=E1 acessando a DLL, e n=E3o u=
m=20
> aplicativo qquer
> if (HiWord(Integer(lpici.lpVerb)) <> 0) then
> begin
> Exit;
> end;
> =20
> NotesExe :=3D GetNotesPath('NotesSE.exe');
> if ((NotesExe =3D '') or (not FileExists(NotesExe))) then
> begin
> //Chamada abaixo em API, pois tirar o Dialogs.dcu economizou quase=20
> 300kb!
> MessageBox(GetDesktopWindow,'Notes n=E3o instalado corretamente!' +=
=20
> #13 + 'Tente instalar novamente por favor.','Erro de Instala=E7=E3o',MB=
_OK=20
> or MB_ICONERROR);
> exit;
> end;
> =20
> cmdLine :=3D '';
> =20
> case LoWord(Integer(lpici.lpVerb)) of
> 0: // "Editar com o Notes"
> cmdLine :=3D NotesExe + ' "' + fFileName + '"';
> 1: // "Usar como Template do Notes"
> cmdLine :=3D NotesExe + ' -t "' + fFileName + '"';
> //2: //Salvar como template do Notes
> //3: -----------------Separador----------------------------
> //4: //Copiar conte=FAdo
> //5: //Copiar nome do arquivo
> //6: //Informa=E7=F5es do arquivo
> //7: -----------------Separador----------------------------
> //8: //Compilar arquivo
> //9: //Comprimir HTML
> //10:-----------------Separador----------------------------
> //11://Adicionar aos favoritos do Notes
> //12:-----------------Separador----------------------------
> 13: // "HomePage do Notes"
> =20
> ShellExecute(GetDesktopWindow,nil,'http://notes.codigolivre.org.br',nil=
,nil,SW_MAXIMIZE);
> end;
> =20
> if cmdLine <> '' then
> begin
> PrevDir :=3D GetCurrentDir;
> try
> WinExec(PChar(cmdLine), lpici.nShow);
> Result :=3D NOERROR;
> finally
> SetCurrentDir(PrevDir);
> end;
> end;
> end;
> =20
> function TContextMenu.GetCommandString(idCmd, uType: UINT; pwReserved:=20
> PUINT;
> pszName: LPSTR; cchMax: UINT): HRESULT;
> begin
> //Essa fun=E7=E3o descreve o texto da barra de status do explorer
> case idCmd of
> 0: // "Editar com o Notes"
> begin
> if (uType =3D GCS_HELPTEXT) then
> StrCopy(pszName, PChar('Edita o arquivo "' +=20
> ExtractFileName(fFileName) + '" com o Notes SE 2004'));
> Result :=3D NOERROR;
> end;
> =20
> 1: // "Usar como Template do Notes"
> begin
> if (uType =3D GCS_HELPTEXT) then
> StrCopy(pszName, PChar('Usa o arquivo "' +=20
> ExtractFileName(fFileName) + '" como template com o Notes SE 2004'));
> Result :=3D NOERROR;
> end;
> =20
> 3: // "HomePage do Notes SE 2004"
> begin
> if (uType =3D GCS_HELPTEXT) then
> StrCopy(pszName, PChar('HomePage do Notes SE 2004'));
> Result :=3D NOERROR;
> end;
> =20
> else
> Result :=3D E_INVALIDARG;
> end;
> end;
> =20
> type
> TContextMenuFactory =3D class(TComObjectFactory)
> public
> procedure UpdateRegistry(Register: Boolean); override;
> end;
> =20
> procedure TContextMenuFactory.UpdateRegistry(Register: Boolean);
> var
> ClassID: string;
> begin
> //Registra o Menu de contexto
> if Register then begin
> inherited UpdateRegistry(Register);
> =20
> ClassID :=3D GUIDToString(Class_ContextMenu);
> CreateRegKey('*\shellex', '', '');
> CreateRegKey('*\shellex\ContextMenuHandlers', '', '');
> CreateRegKey('*\shellex\ContextMenuHandlers\Notes', '', ClassID);
> =20
> if (Win32Platform =3D VER_PLATFORM_WIN32_NT) then
> with TRegistry.Create do
> try
> RootKey :=3D HKEY_LOCAL_MACHINE;
> OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Shell=20
> Extensions', True);
> OpenKey('Approved', True);
> WriteString(ClassID, 'Notes SE 2004 Shell Extension');
> finally
> Free;
> end;
> end
> else begin
> DeleteRegKey('*\shellex\ContextMenuHandlers\Notes');
> DeleteRegKey('*\shellex\ContextMenuHandlers');
> DeleteRegKey('*\shellex');
> =20
> inherited UpdateRegistry(Register);
> end;
> end;
> =20
> initialization
> TContextMenuFactory.Create(ComServer, TContextMenu,=20
> Class_ContextMenu,'', 'Notes SE 2004 Shell Extension',=20
> ciMultiInstance,tmApartment);
> end.
> =20
>
> ---
> Verifica=E7=E3o de V=EDrus executada:
> Nenhum v=EDrus encontrado!
> Sudeste Seguran=E7a e Transporte de Valores
> Departamento de Tecnologia e Informa=E7=F5es
> Checked by AVG anti-virus system (http://www.grisoft.com).
> Version: 6.0.545 / Virus Database: 339 - Release Date: 27/11/2003
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
|
|
From: Daniel R. <dan...@ya...> - 2003-12-03 11:17:49
|
Valeu Anderson! Funciona Direitinho!
A intens=E3o foi boa, mas precisa da unit clipbrd nesse c=F3digo, pq ele =
usa clipboard.open, etc... :)
Precisamos de uma que use s=F3 APIs do Windows...=20
Thanks anyway!
[]=B4s
Daniel
----- Original Message -----=20
From: Anderson R. Barbieri=20
To: not...@li...=20
Sent: Wednesday, December 03, 2003 1:14 AM
Subject: [Notes2-team] Re: [Notes2-team] Re: [Notes2-team] Re: =
[Notes2-team] Uma =FAltima id=E9ia, status, entrevista
Daniel,
n=E3o consegui achar o bug. N=E3o parece ter erro nehum...=20
Dae fui at=E9 os newgroups da Borland (usando o maravilhoso google)
e consegui achar c=F3digo pra fazer o que tu precisa fazer (depois de =
mais
de 50 minutos de pesquisa, mas ao menos achei):
Naum testei, mas =E9 de um membro do TeamB, ent=E3o vai funcionar :)
Anderson
{+------------------------------------------------------------
| Unit ClipUtil
|
| Version: 1.0 Created: 05/05/96, 12:56:57
| Last Modified: 05/05/96, 12:56:57
| Author : P. Below
| Project: Common Utilities
| Description:
| Routines to copy string lists and stream to and
| from the clipboard.
+------------------------------------------------------------}
Unit ClipUtil;
Interface
Uses Classes;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Implementation
Uses WinTypes, WinProcs, SysUtils, Clipbrd;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr :=3D TMemoryStream.Create;
try
S.SaveToStream(MemStr);
CopyStreamToClipboard( fmt, MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsToClipboard }
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
S.Position :=3D 0;
hMem :=3D GlobalAlloc( GHND or GMEM_DDESHARE, S.Size );
If hMem <> 0 Then Begin
pMem :=3D GlobalLock( hMem );
If pMem <> Nil Then Begin
try
S.Read( pMem^, S.Size );
S.Position :=3D 0;
finally
GlobalUnlock( hMem );
end;
Clipboard.Open;
try
Clipboard.SetAsHandle( fmt, hMem );
finally
Clipboard.Close;
end;
End { If }
Else Begin
GlobalFree( hMem );
OutOfMemoryError;
End;
End { If }
Else
OutOfMemoryError;
End; { CopyStreamToClipboard }
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr:=3D TMemoryStream.Create;
try
CopyStreamFromClipboard( fmt, MemStr );
MemStr.Position :=3D 0;
S.LoadFromStream( MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsFromClipboard }
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
hMem :=3D Clipboard.GetAsHandle( fmt );
If hMem <> 0 Then Begin
pMem :=3D GlobalLock( hMem );
If pMem <> Nil Then Begin
try
S.Write( pMem^, GlobalSize( hMem ));
S.Position :=3D 0;
finally =20
GlobalUnlock( hMem );
end; =20
End { If }
Else
raise Exception.Create(
'CopyStreamFromClipboard: could not lock global handle '+
'obtained from clipboard!');
End; { If }
End; { CopyStreamFromClipboard }
End. { Unit ClipUtil }---Verifica=E7=E3o de V=EDrus executada:Nenhum =
v=EDrus encontrado!Sudeste Seguran=E7a e Transporte de =
ValoresDepartamento de Tecnologia e Informa=E7=F5esChecked by AVG =
anti-virus system (http://www.grisoft.com).Version: 6.0.545 / Virus =
Database: 339 - Release Date: 27/11/2003 |
|
From: Anderson R. B. <no...@ig...> - 2003-12-03 17:43:37
|
Putz! Naum vi direito, desculpa ae...
Daniel, vamos usar a porcaria da unit clipboard...
eu e tu naum conseguimos achar o bug e nos newgroups
naum tem nehuma informa=E7=E3o de como usar a clipboard
diretamente por API. Deve ser poss=EDvel, claro, mas n=E3o
vamos morrer por 30 kbs, eu acho...
Ab.
Anderson
Daniel Roma wrote:
> Valeu Anderson! Funciona Direitinho!
> A intens=E3o foi boa, mas precisa da unit clipbrd nesse c=F3digo, pq el=
e=20
> usa clipboard.open, etc... :)
> Precisamos de uma que use s=F3 APIs do Windows...
> =20
> Thanks anyway!
> =20
> =20
> []=B4s
> =20
> Daniel
>
> ----- Original Message -----
> *From:* Anderson R. Barbieri <mailto:no...@ig...>
> *To:* not...@li...
> <mailto:not...@li...>
> *Sent:* Wednesday, December 03, 2003 1:14 AM
> *Subject:* [Notes2-team] Re: [Notes2-team] Re: [Notes2-team] Re:
> [Notes2-team] Uma =FAltima id=E9ia, status, entrevista
>
> Daniel,
> n=E3o consegui achar o bug. N=E3o parece ter erro nehum...
>
> Dae fui at=E9 os newgroups da Borland (usando o maravilhoso google)
> e consegui achar c=F3digo pra fazer o que tu precisa fazer (depois
> de mais
> de 50 minutos de pesquisa, mas ao menos achei):
>
> Naum testei, mas =E9 de um membro do TeamB, ent=E3o vai funcionar =
:)
> Anderson
>
>{+------------------------------------------------------------
> | Unit ClipUtil
> |
> | Version: 1.0 Created: 05/05/96, 12:56:57
> | Last Modified: 05/05/96, 12:56:57
> | Author : P. Below
> | Project: Common Utilities
> | Description:
> | Routines to copy string lists and stream to and
> | from the clipboard.
> +------------------------------------------------------------}
>Unit ClipUtil;
>Interface
>
>Uses Classes;
>
> Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
> Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
> Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
> Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
>
>Implementation
>
>Uses WinTypes, WinProcs, SysUtils, Clipbrd;
>
>Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
> Var
> MemStr: TMemoryStream;
> Begin
> MemStr :=3D TMemoryStream.Create;
> try
> S.SaveToStream(MemStr);
> CopyStreamToClipboard( fmt, MemStr );
> finally
> MemStr.Free;
> end;
> End; { CopyStringsToClipboard }
>
>Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
> Var
> hMem: THandle;
> pMem: Pointer;
> Begin
> S.Position :=3D 0;
> hMem :=3D GlobalAlloc( GHND or GMEM_DDESHARE, S.Size );
> If hMem <> 0 Then Begin
> pMem :=3D GlobalLock( hMem );
> If pMem <> Nil Then Begin
> try
> S.Read( pMem^, S.Size );
> S.Position :=3D 0;
> finally
> GlobalUnlock( hMem );
> end;
> Clipboard.Open;
> try
> Clipboard.SetAsHandle( fmt, hMem );
> finally
> Clipboard.Close;
> end;
> End { If }
> Else Begin
> GlobalFree( hMem );
> OutOfMemoryError;
> End;
> End { If }
> Else
> OutOfMemoryError;
> End; { CopyStreamToClipboard }
>
>Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
> Var
> MemStr: TMemoryStream;
> Begin
> MemStr:=3D TMemoryStream.Create;
> try
> CopyStreamFromClipboard( fmt, MemStr );
> MemStr.Position :=3D 0;
> S.LoadFromStream( MemStr );
> finally
> MemStr.Free;
> end;
> End; { CopyStringsFromClipboard }
>
>Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
> Var
> hMem: THandle;
> pMem: Pointer;
> Begin
> hMem :=3D Clipboard.GetAsHandle( fmt );
> If hMem <> 0 Then Begin
> pMem :=3D GlobalLock( hMem );
> If pMem <> Nil Then Begin
> try
> S.Write( pMem^, GlobalSize( hMem ));
> S.Position :=3D 0;
> finally =20
> GlobalUnlock( hMem );
> end; =20
> End { If }
> Else
> raise Exception.Create(
> 'CopyStreamFromClipboard: could not lock global handle '+
> 'obtained from clipboard!');
> End; { If }
> End; { CopyStreamFromClipboard }
>
>End. { Unit ClipUtil }
>
>---
>Verifica=E7=E3o de V=EDrus executada:
>Nenhum v=EDrus encontrado!
>Sudeste Seguran=E7a e Transporte de Valores
>Departamento de Tecnologia e Informa=E7=F5es
>Checked by AVG anti-virus system (http://www.grisoft.com).
>Version: 6.0.545 / Virus Database: 339 - Release Date: 27/11/2003
>
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
|
|
From: Daniel R. <dan...@ya...> - 2003-12-04 17:50:55
|
Infelizmente anderson n=E3o tamos falando de 30 K... tamos falando de =
uma DLL que j=E1 t=E1 com 166 Kb Sem Todo o c=F3digo implementado, e que =
colocando o Clipbrd no uses pula pra 406Kb... mais que o dobro s=F3 por =
causa dessa unit...=20
N=E3o me conformo de n=E3o conseguir uma solu=E7=E3o simples via API... =
:(
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento
----- Original Message -----=20
From: Anderson R. Barbieri=20
To: not...@li...=20
Sent: Wednesday, December 03, 2003 3:51 PM
Subject: Re: [Notes2-team] Re: [Notes2-team] Uma =FAltima id=E9ia, =
status, entrevista
Putz! Naum vi direito, desculpa ae...
Daniel, vamos usar a porcaria da unit clipboard...
eu e tu naum conseguimos achar o bug e nos newgroups
naum tem nehuma informa=E7=E3o de como usar a clipboard
diretamente por API. Deve ser poss=EDvel, claro, mas n=E3o
vamos morrer por 30 kbs, eu acho...
Ab.
Anderson
Daniel Roma wrote:
Valeu Anderson! Funciona Direitinho!
A intens=E3o foi boa, mas precisa da unit clipbrd nesse c=F3digo, pq =
ele usa clipboard.open, etc... :)
Precisamos de uma que use s=F3 APIs do Windows...=20
Thanks anyway!
[]=B4s
Daniel
----- Original Message -----=20
From: Anderson R. Barbieri=20
To: not...@li...=20
Sent: Wednesday, December 03, 2003 1:14 AM
Subject: [Notes2-team] Re: [Notes2-team] Re: [Notes2-team] Re: =
[Notes2-team] Uma =FAltima id=E9ia, status, entrevista
Daniel,
n=E3o consegui achar o bug. N=E3o parece ter erro nehum...=20
Dae fui at=E9 os newgroups da Borland (usando o maravilhoso =
google)
e consegui achar c=F3digo pra fazer o que tu precisa fazer (depois =
de mais
de 50 minutos de pesquisa, mas ao menos achei):
Naum testei, mas =E9 de um membro do TeamB, ent=E3o vai funcionar =
:)
Anderson
{+------------------------------------------------------------
| Unit ClipUtil
|
| Version: 1.0 Created: 05/05/96, 12:56:57
| Last Modified: 05/05/96, 12:56:57
| Author : P. Below
| Project: Common Utilities
| Description:
| Routines to copy string lists and stream to and
| from the clipboard.
+------------------------------------------------------------}
Unit ClipUtil;
Interface
Uses Classes;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Implementation
Uses WinTypes, WinProcs, SysUtils, Clipbrd;
Procedure CopyStringsToClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr :=3D TMemoryStream.Create;
try
S.SaveToStream(MemStr);
CopyStreamToClipboard( fmt, MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsToClipboard }
Procedure CopyStreamToClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
S.Position :=3D 0;
hMem :=3D GlobalAlloc( GHND or GMEM_DDESHARE, S.Size );
If hMem <> 0 Then Begin
pMem :=3D GlobalLock( hMem );
If pMem <> Nil Then Begin
try
S.Read( pMem^, S.Size );
S.Position :=3D 0;
finally
GlobalUnlock( hMem );
end;
Clipboard.Open;
try
Clipboard.SetAsHandle( fmt, hMem );
finally
Clipboard.Close;
end;
End { If }
Else Begin
GlobalFree( hMem );
OutOfMemoryError;
End;
End { If }
Else
OutOfMemoryError;
End; { CopyStreamToClipboard }
Procedure CopyStringsFromClipboard( fmt: Cardinal; S: TStrings );
Var
MemStr: TMemoryStream;
Begin
MemStr:=3D TMemoryStream.Create;
try
CopyStreamFromClipboard( fmt, MemStr );
MemStr.Position :=3D 0;
S.LoadFromStream( MemStr );
finally
MemStr.Free;
end;
End; { CopyStringsFromClipboard }
Procedure CopyStreamFromClipboard( fmt: Cardinal; S: TStream );
Var
hMem: THandle;
pMem: Pointer;
Begin
hMem :=3D Clipboard.GetAsHandle( fmt );
If hMem <> 0 Then Begin
pMem :=3D GlobalLock( hMem );
If pMem <> Nil Then Begin
try
S.Write( pMem^, GlobalSize( hMem ));
S.Position :=3D 0;
finally =20
GlobalUnlock( hMem );
end; =20
End { If }
Else
raise Exception.Create(
'CopyStreamFromClipboard: could not lock global handle '+
'obtained from clipboard!');
End; { If }
End; { CopyStreamFromClipboard }
End. { Unit ClipUtil }---
Verifica=E7=E3o de V=EDrus executada:
Nenhum v=EDrus encontrado!
Sudeste Seguran=E7a e Transporte de Valores
Departamento de Tecnologia e Informa=E7=F5es
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.545 / Virus Database: 339 - Release Date: 27/11/2003
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
---Verifica=E7=E3o de V=EDrus executada:Nenhum v=EDrus =
encontrado!Sudeste Seguran=E7a e Transporte de ValoresDepartamento de =
Tecnologia e Informa=E7=F5esChecked by AVG anti-virus system =
(http://www.grisoft.com).Version: 6.0.547 / Virus Database: 340 - =
Release Date: 2/12/2003 |
|
From: Jonas R. S. S. <jon...@bo...> - 2003-12-05 17:02:33
|
Eu testei aqui e funcionou blz Daniboy huhu... Soh encontrei um problema referente a aloca=E7=E3o de mem=F3ria (vc tava alocano espa=E7o para X caracteres qdo deveria alocar pra X+1, devido ao caracter nulo, o q acabava cortano o =FAltimo caracter... ) Para tentar simular o q vc tem ae, eu coloquei a fun=E7=E3o numa dll e = at=E9 especifiquei ela como seno stdcall pra ficar o mais windows poss=EDvel haha... Obs: soh usei a unit windows :] Dae eu inseri ela no meu prog de forma est=E1tica e din=E2mica, foi numa boa... Eu perguntei pro Anderson e ele disse q funfou blesma com ele tb... Vai ver o seu delphi tah com viadagem hahaha :] Eskece essa parte ae kra e vai continuano o projeto... Se preciso for, adicione a unit clpbrd mesmo q temporariamente... Dae qdo tiver mais tempo vc ca=E7a o q tem de errado, deixa um coment=E1rio grand=E3o hehe = ;] Soh mexi no Data :=3D GlobalAlloc... "Data :=3D GlobalAlloc( GMEM_MOVEABLE+GMEM_DDESHARE, Length( aText )+1 = );" []'s Jonas Raoni Soares Silva ---------------------------------- #Equipe do Notes - Desenvolvimento -----Mensagem original----- De: not...@li... [mailto:notes2-team- Infelizmente anderson n=E3o tamos falando de 30 K... tamos falando de = uma DLL que j=E1 t=E1 com 166 Kb Sem Todo o c=F3digo implementado, e que = colocando o Clipbrd no uses pula pra 406Kb... mais que o dobro s=F3 por causa = dessa unit...=20 N=E3o me conformo de n=E3o conseguir uma solu=E7=E3o simples via API... = :( []=B4s Daniel Roma #Equipe do Notes - Desenvolvimento |
|
From: Daniel R. <dan...@ya...> - 2003-12-05 18:17:56
|
%$=A8#&=A8%%$$!!!!!
E EU N=C3O TO NERVOSO!!!
:)
S=F3 pra me fazer passar por palha=E7o, recompilei agora a DLL sem =
alterar nadinha e tava funcionando... :|
S=F3 precisei mesmo da dica do Jonas pra ele pegar todas as letras, pois =
acabava comendo a ultima, mas a fun=E7=E3o tava funcionando... =
brincadeira n=E9!
Temos a atual situa=E7=E3o do Shell Ext... quem tiver algo a contribuir, =
favor entrar em contato:
"Editar com o Notes"
Executa 'NotesExe + ' "' + fFileName + '"';
=20
"Usar como Template do Notes"
executa 'NotesExe + ' -t "' + fFileName + '"';
=20
"Salvar como template do Notes"
?????
-----------------Separador----------------------------
=20
"Copiar conte=FAdo"
begin
aFileContent :=3D TStrings.Create;
aFileContent.LoadFromFile(fFileName);
SetClipboardText(PChar(aFileContent.Text));
aFileContent.Free;
end;
Queria descobrir se o codigo acima funcionava, ou se o Text ia =
retornar sem os caracteres $A e $D. Mas nem consegui descobrir pois =
trava o explorer... o fato =E9 que o compilador do delphi da um monte de =
warnings sobre usar TStrings nesse c=F3digo. Algu=E9m tem rotinas ae pra =
ler o arquivo direto do disco, linha a linha?
"Copiar nome do arquivo"
begin
SetClipboardText(fFileName);
end;
Agora funciona!!!
"Informa=E7=F5es do arquivo"
Ainda n=E3o implementado, mas parece que =E9 Notes.exe -i
=E9 isso mesmo??
os items abaixo, exceto o da Home Page, n=E3o sei se j=E1 est=E3o =
implementados no Notes... algu=E9m ae me informa, please??
//7: -----------------Separador----------------------------
//8: //Compilar arquivo
//9: //Comprimir HTML
//10:-----------------Separador----------------------------
//11://Adicionar aos favoritos do Notes
//12:-----------------Separador----------------------------
13: // "HomePage do Notes"
=
ShellExecute(GetDesktopWindow,nil,'http://notes.codigolivre.org.br',nil,n=
il,SW_MAXIMIZE);
end;
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento
----- Original Message -----=20
From: Jonas Raoni Soares Silva=20
To: not...@li...=20
Sent: Friday, December 05, 2003 2:11 AM
Subject: [Notes2-team] RES: [Notes2-team] Re: [Notes2-team] Re: =
[Notes2-team] Uma =FAltima id=E9ia, status, entrevista
Eu testei aqui e funcionou blz Daniboy huhu... Soh encontrei um =
problema
referente a aloca=E7=E3o de mem=F3ria (vc tava alocano espa=E7o para X
caracteres qdo deveria alocar pra X+1, devido ao caracter nulo, o q
acabava cortano o =FAltimo caracter... )
Para tentar simular o q vc tem ae, eu coloquei a fun=E7=E3o numa dll e =
at=E9
especifiquei ela como seno stdcall pra ficar o mais windows poss=EDvel
haha... Obs: soh usei a unit windows :]
Dae eu inseri ela no meu prog de forma est=E1tica e din=E2mica, foi =
numa
boa... Eu perguntei pro Anderson e ele disse q funfou blesma com ele
tb... Vai ver o seu delphi tah com viadagem hahaha :]
Eskece essa parte ae kra e vai continuano o projeto... Se preciso for,
adicione a unit clpbrd mesmo q temporariamente... Dae qdo tiver mais
tempo vc ca=E7a o q tem de errado, deixa um coment=E1rio grand=E3o =
hehe ;]
Soh mexi no Data :=3D GlobalAlloc...
"Data :=3D GlobalAlloc( GMEM_MOVEABLE+GMEM_DDESHARE, Length( aText )+1 =
);"
[]'s
Jonas Raoni Soares Silva
----------------------------------
#Equipe do Notes - Desenvolvimento
-----Mensagem original-----
De: not...@li... [mailto:notes2-team-
Infelizmente anderson n=E3o tamos falando de 30 K... tamos falando de =
uma
DLL que j=E1 t=E1 com 166 Kb Sem Todo o c=F3digo implementado, e que =
colocando
o Clipbrd no uses pula pra 406Kb... mais que o dobro s=F3 por causa =
dessa
unit...=20
N=E3o me conformo de n=E3o conseguir uma solu=E7=E3o simples via =
API... :(
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
notes2-team mailing list
not...@li...
https://lists.sourceforge.net/lists/listinfo/notes2-team
---
Verifica=E7=E3o de V=EDrus executada:
Nenhum v=EDrus encontrado!
Sudeste Seguran=E7a e Transporte de Valores
Departamento de Tecnologia e Informa=E7=F5es
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.547 / Virus Database: 340 - Release Date: 2/12/2003 |
|
From: Jonas R. S. S. <jon...@bo...> - 2003-12-06 01:34:27
|
Soh toh mexeno com PChar's no TNotesSeeker huhu... Logo logo vou mestrar
:b
var
FS: TFileStream;
Buffer: PChar;
begin
FS :=3D TFileStream.Create( FFilename, fmOpenRead );
GetMem( Buffer, FS.Size+1 );
//Eu nunca eske=E7o de setar o =FAltimo char hehe :]
( Buffer + FS.Read( Buffer^, FS.Size ) )^ :=3D #0;
SetClipBoardText( Buffer );
FreeMem( Buffer );
FS.Free;
end;
Amanh=E3 =E9 mais um fim de semana de trabaio haha, soh funciono nos =
fins de
semana... Vamos ver o q eu vou fazer, acabar ou otimizar a classe????
Eis a quest=E3o... :]
No =FAltimo fim de semana eu tive alguns problemas com backup e tive q
refazer boa parte do q jah estava pronto... Mas memo assim deu tempo de
adicionar suporte a wild cards (agora parece q tah funfano 100%, soh
preciso otimizar pq eu tava mais interessado em acabar akilo do q no
c=F3digo em s=ED, isso pq jah era mei tarde, dae o Anderson resolveu o
problema dele na mesma hora q eu haha, fomos mimir juntinhos) :]
Soh falta implementar suporte a WholeWords (a parte mais besta) e
pesquisa de tr=E1s pra frente (vou fazer uma simples invers=E3o no
c=F3digo...), mas otimizar o c=F3digo agora seria uma boa... Vou ver o q =
eu
vou fazer... Tah tudo funcionano, mas ainda naum estou satisfeito com o
c=F3digo, depois q eu coloquei WildCards apareceram mtas gambiarras
hehe...
Jonas Raoni Soares Silva
----------------------------------
#Equipe do Notes - Desenvolvimento
-----Mensagem original-----
De: not...@li...
[mailto:not...@li...] Em nome de Daniel Roma
=20
Queria descobrir se o codigo acima funcionava, ou se o Text ia
retornar sem os caracteres $A e $D. Mas nem consegui descobrir pois
trava o explorer... o fato =E9 que o compilador do delphi da um monte de
warnings sobre usar TStrings nesse c=F3digo. Algu=E9m tem rotinas ae pra =
ler
o arquivo direto do disco, linha a linha?
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento
|
|
From: Anderson R. B. <no...@ig...> - 2003-12-06 02:59:02
|
Ah! Beleza! Vou te passar um monte de c=F3digo/informa=E7=E3o... cuida ae=
:
Daniel Roma wrote:
> "Salvar como template do Notes"
> ?????
Retira isto por que agora vai ser mais complicado de implementar...=20
estou reestruturando
todas as pastas e arquivos das configura=E7=F5es para que fique bem f=E1c=
il=20
adicionar suporte
a novos tipos de arquivos no Notes. Para isto, cada linguagem (php,=20
delphi, js) tem a sua
pr=F3pria pasta. A pasta de cada lingaugem cont=E9m: o parser XML da=20
linguagem, as op=E7=F5es
do editor para aquela linguagem, uma pasta contendo os templates da=20
linguagem e mais
uma pasta que cont=E9m os itens da biblioteca para a linguagem. Assim,=20
para salvar como
template, seria preciso deixar o usu=E1rio selecionar para qual linguagem=
=20
o template vai servir
(ou seja, teria q usar um di=E1logo, VCL e aumentaria mt o peso do=20
DLL...). Quero escrever
um texto sobre como estaum as pastas e arquivos de configura=E7=E3o do=20
Notes, mas ainda
naum tive tempo pra isto...
> -----------------Separador----------------------------
> "Informa=E7=F5es do arquivo"
> Ainda n=E3o implementado, mas parece que =E9 Notes.exe -i
> =E9 isso mesmo??
N=E3o tem ainda par=E2mentro para isto, mas acho que "-i" =E9 perfeito. P=
ode usar
que vou implementar (vou ter que reescrever todo o 'parser' dos=20
par=E2mentros mesmo! hhehheheh)
>
> os items abaixo, exceto o da Home Page, n=E3o sei se j=E1 est=E3o=20
> implementados no Notes... algu=E9m ae me informa, please??
> =20
> //7: -----------------Separador----------------------------
> //8: //Compilar arquivo
Naum existe mais a op=E7=E3o "compilar arquivo'... existe o menu executar=
...=20
acho que =E9
melhor tirar esta op=E7=E3o...
> //9: //Comprimir HTML
Segue o c=F3digo (removi as depend=EAncias que haviam com as units do Not=
es,=20
deve
ter ficado um pouco mais lento, mas ainda assim r=E1pido o suficiente. Eu=
=20
to reescrevendo
as rotinas direto no mozilla mail, entaum erros podem ocorrer, hahhahaha)=
:
//////////////////////////////////////////////
// COMPRIME HTML
////////////////////////////////////////////////
function compHTML(const S): string;
begin
Result:=3D S;
// fins de linha
strReplaceAll(Result, #13#10#13#10,'');
strReplaceAll(Result, #13#13,'');
strReplaceAll(Result, #10#10,'');
// tabs duplos
strReplaceAll(Result, #9#9, #9);
// espa=E7os duplos
strReplaceAll(Result, #32#32, #32);
// espa=E7os e tabs ao in=EDcio da linha
strReplaceAll(Result, #10#32, #10);
strReplaceAll(Result, #13#32, #13);
strReplaceAll(Result, #10#9, #10);
strReplaceAll(Result, #13#9, #13);
// repte-se tudo, pois ao fazer a primeira compress=E3o
// =E9 poss=EDvel que apare=E7am novos caracteres a serem comprimidos
// fins de linha
strReplaceAll(Result, #13#10#13#10,'');
strReplaceAll(Result, #13#13,'');
strReplaceAll(Result, #10#10,'');
// tabs duplos
strReplaceAll(Result, #9#9, #9);
// espa=E7os duplos
strReplaceAll(Result, #32#32, #32);
// espa=E7os e tabs ao in=EDcio da linha
strReplaceAll(Result, #10#32, #10);
strReplaceAll(Result, #13#32, #13);
strReplaceAll(Result, #10#9, #10);
strReplaceAll(Result, #13#9, #13);
end;
/////////////////////////////////////////
///// SUBSTITUI TODAS AS OCORR=CANCIAS DE UMA STRING
////// MESMO (o que quer dizer que se depois da primeira substitui=E7=E3o
////// as altera=E7=F5es fa=E7am que o mesmo padr=E3o de caracteres ressu=
rja,
////// ele ser=E1 substitu=EDdo tb=E9m...
//////////////////////////////////////////////////
procedure StrReplaceAll(var S: string; const aSearch, aReplace: string);
begin
While Pos(aSearch, S) > 0 do
S:=3D StringReplace(S, aSearch, aReplace, [rfReplaceAll]);
end;
////////////////////////////////
/// SALVA STRING EM ARQUIVO
//////////////////////////////////////////////////////////
procedure nStrToFile(const nArq: string; const oQporNoArq: string);
begin
with TFileStream.Create(nArq, fmCreate) do
try
Write(Pointer(oQporNoArq)^, Length(oQporNoArq));
finally
Free;
end;
end;
/// o jonas passou j=E1 uma fun=E7=E3o para carregar o arquivo pruma stri=
ng :)
> //10:-----------------Separador----------------------------
> //11://Adicionar aos favoritos do Notes
Basta adicionar o nome do arquivo na =FAltima linha do arquivo que cont=E9=
m
os favoritos...o Notes remove entradas duplicadas, ent=E3o a shell extens=
ion
naum precisa fazer isto, heheheh. Acho que termos que ter o caminho para
este arquivo no registro, naum? Pq a localiza=E7=E3o dele depender=E1 das=
op=E7=F5es
de isntala=E7=E3o do usu=E1rio...
Mais alguma coisa?
Anderson
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
|
|
From: Daniel R. <dan...@ya...> - 2003-12-11 18:29:44
|
Ahhhhhrg! Algu=E9m mata meu chefe por favor!!!!!
humpf!
Bom, consegui alguns segundos pra escrever um e-mailzinho... :)
Anderson, n=E3o acho legal colocar o comprimir HTML como c=F3digo dentro =
do Shell Extension, pq seria replica=E7=E3o.... depois, se formos mudar =
alguma coisa nesse algor=EDtmo, ter=EDamos que mudar nos dois lugares, =
isso se lembrarmos que tinha l=E1 tbem... ent=E3o proponho que estes =
c=F3digos "compartilhados" entre o Shell Ext e o Notes em si sejam =
colocados numa DLL (n=E3o gosto muito dessa solu=E7=E3o, mas seria o =
mais correto), ou colocar um par=E2metro no notes (-c por exemplo) para =
que o pr=F3prio notes fa=E7a o servi=E7o... que acham?
[]=B4s
Daniel Roma
#Equipe do Notes - Desenvolvimento
----- Original Message -----=20
From: Anderson R. Barbieri=20
To: not...@li...=20
Sent: Saturday, December 06, 2003 1:06 AM
Subject: [Notes2-team] Re: c=F3digo p/ a shellextension...
Ah! Beleza! Vou te passar um monte de c=F3digo/informa=E7=E3o... cuida =
ae:
Daniel Roma wrote:
"Salvar como template do Notes"
?????
Retira isto por que agora vai ser mais complicado de implementar... =
estou reestruturando
todas as pastas e arquivos das configura=E7=F5es para que fique bem =
f=E1cil adicionar suporte
a novos tipos de arquivos no Notes. Para isto, cada linguagem (php, =
delphi, js) tem a sua
pr=F3pria pasta. A pasta de cada lingaugem cont=E9m: o parser XML da =
linguagem, as op=E7=F5es
do editor para aquela linguagem, uma pasta contendo os templates da =
linguagem e mais
uma pasta que cont=E9m os itens da biblioteca para a linguagem. Assim, =
para salvar como
template, seria preciso deixar o usu=E1rio selecionar para qual =
linguagem o template vai servir
(ou seja, teria q usar um di=E1logo, VCL e aumentaria mt o peso do =
DLL...). Quero escrever
um texto sobre como estaum as pastas e arquivos de configura=E7=E3o do =
Notes, mas ainda
naum tive tempo pra isto...
-----------------Separador----------------------------
"Informa=E7=F5es do arquivo"
Ainda n=E3o implementado, mas parece que =E9 Notes.exe -i
=E9 isso mesmo??
N=E3o tem ainda par=E2mentro para isto, mas acho que "-i" =E9 =
perfeito. Pode usar
que vou implementar (vou ter que reescrever todo o 'parser' dos =
par=E2mentros mesmo! hhehheheh)
os items abaixo, exceto o da Home Page, n=E3o sei se j=E1 =
est=E3o implementados no Notes... algu=E9m ae me informa, please??
//7: -----------------Separador----------------------------
//8: //Compilar arquivo
Naum existe mais a op=E7=E3o "compilar arquivo'... existe o menu =
executar... acho que =E9
melhor tirar esta op=E7=E3o...
//9: //Comprimir HTML
Segue o c=F3digo (removi as depend=EAncias que haviam com as units do =
Notes, deve
ter ficado um pouco mais lento, mas ainda assim r=E1pido o suficiente. =
Eu to reescrevendo
as rotinas direto no mozilla mail, entaum erros podem ocorrer, =
hahhahaha):
//////////////////////////////////////////////
// COMPRIME HTML
////////////////////////////////////////////////
function compHTML(const S): string;
begin
Result:=3D S;
// fins de linha
strReplaceAll(Result, #13#10#13#10,'');
strReplaceAll(Result, #13#13,'');
strReplaceAll(Result, #10#10,'');
// tabs duplos
strReplaceAll(Result, #9#9, #9);
// espa=E7os duplos
strReplaceAll(Result, #32#32, #32);
// espa=E7os e tabs ao in=EDcio da linha
strReplaceAll(Result, #10#32, #10);
strReplaceAll(Result, #13#32, #13);
strReplaceAll(Result, #10#9, #10);
strReplaceAll(Result, #13#9, #13);
// repte-se tudo, pois ao fazer a primeira compress=E3o
// =E9 poss=EDvel que apare=E7am novos caracteres a serem =
comprimidos
// fins de linha
strReplaceAll(Result, #13#10#13#10,'');
strReplaceAll(Result, #13#13,'');
strReplaceAll(Result, #10#10,'');
// tabs duplos
strReplaceAll(Result, #9#9, #9);
// espa=E7os duplos
strReplaceAll(Result, #32#32, #32);
// espa=E7os e tabs ao in=EDcio da linha
strReplaceAll(Result, #10#32, #10);
strReplaceAll(Result, #13#32, #13);
strReplaceAll(Result, #10#9, #10);
strReplaceAll(Result, #13#9, #13);
end;
/////////////////////////////////////////
///// SUBSTITUI TODAS AS OCORR=CANCIAS DE UMA STRING
////// MESMO (o que quer dizer que se depois da primeira =
substitui=E7=E3o
////// as altera=E7=F5es fa=E7am que o mesmo padr=E3o de caracteres =
ressurja,
////// ele ser=E1 substitu=EDdo tb=E9m...
//////////////////////////////////////////////////
procedure StrReplaceAll(var S: string; const aSearch, aReplace: =
string);
begin
While Pos(aSearch, S) > 0 do
S:=3D StringReplace(S, aSearch, aReplace, [rfReplaceAll]);
end;
////////////////////////////////
/// SALVA STRING EM ARQUIVO
//////////////////////////////////////////////////////////
procedure nStrToFile(const nArq: string; const oQporNoArq: string);
begin
with TFileStream.Create(nArq, fmCreate) do
try
Write(Pointer(oQporNoArq)^, Length(oQporNoArq));
finally
Free;
end;
end;
/// o jonas passou j=E1 uma fun=E7=E3o para carregar o arquivo pruma =
string :)
//10:-----------------Separador----------------------------
//11://Adicionar aos favoritos do Notes
Basta adicionar o nome do arquivo na =FAltima linha do arquivo que =
cont=E9m
os favoritos...o Notes remove entradas duplicadas, ent=E3o a shell =
extension
naum precisa fazer isto, heheheh. Acho que termos que ter o caminho =
para
este arquivo no registro, naum? Pq a localiza=E7=E3o dele depender=E1 =
das op=E7=F5es
de isntala=E7=E3o do usu=E1rio...
Mais alguma coisa?
Anderson
--=20
Anderson Rodrigues Barbieri
--------------------------------------------
#Equipe do Notes - Coordenador/Desenvolvedor
{ TAndInfo }
ICQ #149391850 / no...@ig...
Notes - http://notes.codigolivre.org.br
NotesDev - http://notes2.sf.net/dev
F=F3rum - http://notes2.sf.net/forum
---Verifica=E7=E3o de V=EDrus executada:Nenhum v=EDrus =
encontrado!Sudeste Seguran=E7a e Transporte de ValoresDepartamento de =
Tecnologia e Informa=E7=F5esChecked by AVG anti-virus system =
(http://www.grisoft.com).Version: 6.0.550 / Virus Database: 342 - =
Release Date: 9/12/2003 |
|
From: Jonas R. S. S. <jon...@bo...> - 2003-12-11 23:25:37
|
Agora eu naum sei tb hehe :b Vou colocar mais d=FAvida nessa quest=E3o huhu =3DP - Colocar o c=F3digo na DLL do ShellExt naum acho q seja uma boa tb :b - O melhor seria bindar isso ae no execut=E1vel memo, pq dae tudo = ficaria centralizado e talz (menos trabalho para posteriores manuten=E7=F5es...) - Se bem q fazer uma dll soh para isso =E9 a melhor op=E7=E3o em termos = de velocidade, obrigar o kra a esperar o notes carregar soh para executar uma tarefa extremamente r=E1pida eh fogo (se bem q isso pode ser contornado adicionando a checagem de par=E2metros no dpr) :b - Outra op=E7=E3o seria fazer um programinha/dll soh com as coisas b=E1sicas... Eu digo coisas q soh tem processamento (sem GUI no = meio...), pode at=E9 ser um prog em forma de console jah q naum vai ter interface memo :] Obs: Aeee passei em segundo na faku haeuheauheaaeu =3D] Jonas Raoni Soares Silva ----------------------------------- #Equipe do Notes - Desenvolvimento -----Mensagem original----- De: not...@li... [mailto:not...@li...] Em nome de Daniel Roma Ahhhhhrg! Algu=E9m mata meu chefe por favor!!!!! humpf! Bom, consegui alguns segundos pra escrever um e-mailzinho... :) Anderson, n=E3o acho legal colocar o comprimir HTML como c=F3digo dentro = do Shell Extension, pq seria replica=E7=E3o.... depois, se formos mudar = alguma coisa nesse algor=EDtmo, ter=EDamos que mudar nos dois lugares, isso se lembrarmos que tinha l=E1 tbem... ent=E3o proponho que estes c=F3digos "compartilhados" entre o Shell Ext e o Notes em si sejam colocados numa DLL (n=E3o gosto muito dessa solu=E7=E3o, mas seria o mais correto), ou colocar um par=E2metro no notes (-c por exemplo) para que o pr=F3prio = notes fa=E7a o servi=E7o... que acham? []=B4s Daniel Roma #Equipe do Notes - Desenvolvimento |
|
From: Anderson R. B. <no...@ig...> - 2003-12-12 15:09:52
|
Acho que n=E3o tem por que n=E3o colocar o c=F3digo na shellextension. Pq? 1. Criar uma DLL ou outro execut=E1vel para apenas uma fun=E7=E3o n=E3o faz nehum sentido (tudo fica mais lerdo e mais pesado). 2. N=E3o h=E1 pq colocar outras fun=E7=F5es no DLL/execut=E1vel al=E9m de= sta pois =E9 a =FAnica que estar=E1 na shellextension e no notes ao mesmo tem= po 3. Essa fun=E7=E3o provavelmente n=E3o sofrer=E1 modifica=E7=F5es daqui p= ra frente Prefiro n=E3o colocar a op=E7=E3o na shellext do que ter que criar mais u= m DLL ou execut=E1vel... se n=E3o quiserem colocar o c=F3digo dentro da shellex= t, ent=E3o tiramos a op=E7=E3o. Um DLL/Execut=E1vel a mais quer dizer mais 130 kb qu= e ser=E3o completamente in=FAteis... Ab. Anderson Jonas Raoni Soares Silva wrote: >Agora eu naum sei tb hehe :b > >Vou colocar mais d=FAvida nessa quest=E3o huhu =3DP > >- Colocar o c=F3digo na DLL do ShellExt naum acho q seja uma boa tb :b >- O melhor seria bindar isso ae no execut=E1vel memo, pq dae tudo ficari= a >centralizado e talz (menos trabalho para posteriores manuten=E7=F5es...) >- Se bem q fazer uma dll soh para isso =E9 a melhor op=E7=E3o em termos = de >velocidade, obrigar o kra a esperar o notes carregar soh para executar >uma tarefa extremamente r=E1pida eh fogo (se bem q isso pode ser >contornado adicionando a checagem de par=E2metros no dpr) :b >- Outra op=E7=E3o seria fazer um programinha/dll soh com as coisas >b=E1sicas... Eu digo coisas q soh tem processamento (sem GUI no meio...)= , >pode at=E9 ser um prog em forma de console jah q naum vai ter interface >memo :] > >Obs: Aeee passei em segundo na faku haeuheauheaaeu =3D] > >Jonas Raoni Soares Silva >----------------------------------- >#Equipe do Notes - Desenvolvimento > > >-----Mensagem original----- >De: not...@li... >[mailto:not...@li...] Em nome de Daniel Roma > >Ahhhhhrg! Algu=E9m mata meu chefe por favor!!!!! > >humpf! > >Bom, consegui alguns segundos pra escrever um e-mailzinho... :) >Anderson, n=E3o acho legal colocar o comprimir HTML como c=F3digo dentro= do >Shell Extension, pq seria replica=E7=E3o.... depois, se formos mudar alg= uma >coisa nesse algor=EDtmo, ter=EDamos que mudar nos dois lugares, isso se >lembrarmos que tinha l=E1 tbem... ent=E3o proponho que estes c=F3digos >"compartilhados" entre o Shell Ext e o Notes em si sejam colocados numa >DLL (n=E3o gosto muito dessa solu=E7=E3o, mas seria o mais correto), ou >colocar um par=E2metro no notes (-c por exemplo) para que o pr=F3prio no= tes >fa=E7a o servi=E7o... que acham? > > >[]=B4s > >Daniel Roma >#Equipe do Notes - Desenvolvimento > > > > >------------------------------------------------------- >This SF.net email is sponsored by: SF.net Giveback Program. >Does SourceForge.net help you be more productive? Does it >help you create better code? SHARE THE LOVE, and help us help >YOU! Click Here: http://sourceforge.net/donate/ >_______________________________________________ >notes2-team mailing list >not...@li... >https://lists.sourceforge.net/lists/listinfo/notes2-team > > > =20 > --=20 Anderson Rodrigues Barbieri -------------------------------------------- #Equipe do Notes - Coordenador/Desenvolvedor { TAndInfo } ICQ #149391850 / no...@ig... Notes - http://notes.codigolivre.org.br NotesDev - http://notes2.sf.net/dev F=F3rum - http://notes2.sf.net/forum |
|
From: Jonas R. S. S. <jon...@bo...> - 2003-12-12 22:46:06
|
Primeiramente eu tava pensano: a dll do shellext deve conter apenas chamadas para outras coisas externas, seu =FAnico objetivo eh mostrar os menuzim e naum processar nada (toh com mania de fazer coisas gen=E9ricas)... Mas pensando bem... Pq naum colocar o c=F3digo lah memo neh??? Qto a dll, tah certo... Eh q eu toh com o pensamento mto gen=E9rico memo huhu, tava pensano em usar isso em outras coisas mais a frente, mas xah keto :b _________________________________________=20 =BB Jonas Raoni Soares Silva=20 =BB=BB Delphi & Web Developer=20 =BB jon...@bo...=20 =BB=BB icq#: 84645392=20 =BB +55(11)6702-0233=20 _________________________________________ > -----Mensagem original----- > De: not...@li...=20 >=20 > Acho que n=E3o tem por que n=E3o colocar > o c=F3digo na shellextension. Pq? >=20 > 1. Criar uma DLL ou outro execut=E1vel para apenas uma fun=E7=E3o > n=E3o faz nehum sentido (tudo fica mais lerdo e mais pesado). > 2. N=E3o h=E1 pq colocar outras fun=E7=F5es no DLL/execut=E1vel al=E9m = > desta pois =E9 a =FAnica que estar=E1 na shellextension e no notes=20 > ao mesmo tempo 3. Essa fun=E7=E3o provavelmente n=E3o sofrer=E1=20 > modifica=E7=F5es daqui pra frente >=20 > Prefiro n=E3o colocar a op=E7=E3o na shellext do que ter que criar=20 > mais um DLL ou execut=E1vel... se n=E3o quiserem colocar o c=F3digo=20 > dentro da shellext, ent=E3o tiramos a op=E7=E3o. Um DLL/Execut=E1vel=20 > a mais quer dizer mais 130 kb que ser=E3o completamente in=FAteis... >=20 > Ab. > Anderson |