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 |