URL i schowek/string

0

Jak sprawdzić czy string w schowku to URL czy nie ? Jeśli tak to w jaki sposób dopisać coś na początku i na końcu tego stringa ?

0

obsługa schowka chyba w FAQ - wyciągasz text, sprawdzasz czy jest człon http:// albo ftp:// albo www. albo coś w tym stylu, jeśli tak to dopisujesz w zmiennej co tam chcesz i kopiujesz do schowka

0

Nie wiem gdzie szukać spakowanej wersji, to sobie skleisz do pliku DPR i skompilujesz:

{ Skleił oraz modyfikacji dokonał
          (c)2003 netvalker
           [email protected]

Programik siedzi sobie ukryty w systemie i podgląda schowek.
Gdy w schowku znajdzie się adres strony www lub adres email
pyta czy otworzyć nową stronę za pomocą explorera lub napisać
list. Programik się zamknie gdy w schowku pojawi się tekst - exit -.

Procedura sprawdza tylko pierwsze znaki adresu :
www.
http:

Więc jeśli w schowku pojawi się jakikolwiek tekst rozpoczynający 
się tymi znakami zostanie rozpoznany jako adres strony internetowej.
Podobna zasada dotyczy adresu Email - sprawdzane jest występowanie 
tylko i wyłącznie znaku - @ - taka sama zasada jak w adresie www.
}
program Url;

uses
  Clipbrd, Windows, Forms, Dialogs, ShellApi;

Label Loop, Loops;

{$R *.res}

var
   Ex : Integer;
   Hm : HDC;
   Ul : String;

Begin
     Ul := '';
     // ukryj belkę
        { * http://4programmers.net/view_faq.html?id=37 * }
     Ex := GetWindowLong(Application.Handle, GWL_EXSTYLE);
        SetWindowLong(Application.Handle,GWL_EXSTYLE,
        Ex or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);

      // nie pozwól uruchomić ponownie
        { * http://4programmers.net/view_faq.html?id=38 * }
      Hm := CreateFileMapping(THANDLE($FFFFFFFF),nil,
            PAGE_READONLY,0,32,'ApplicationTestMap');
        If GetLastError=ERROR_ALREADY_EXISTS then
           Begin
             ShowMessage('Nie można uruchomić tego samego programu drugi raz.');
             Goto loops;
             CloseHandle(Hm);
           End;
     MessageBox(0,'ABY ZAMKNĄĆ PROGRAM SKOPIUJ DO SCHOWKA TEKST - exit -','Utl-informacje',MB_IconeRROR);
     // sprawdź schowka zawartość
     { * http://4programmers.net/view_faq.html?id=81 * + własna inwencja twórcza ;) * }
Loop:
     Try
        If Clipboard.HasFormat(CF_TEXT) then
           Begin
            If Not (Ul = ClipBoard.AsText) then
              Begin
               If ClipBoard.AsText = 'exit' then Ex := 1; // exit w schowku aplikacja się zamknie
               If ((Copy(ClipBoard.AsText,1,4)= 'www.') Or (Copy(ClipBoard.AsText,1,5)= 'http:')) Then
               If MessageBox(0,PAnsiChar(
                             'W schowku prawdopodbnie znajduje się adres strony www :'+ #13 +#13
                           +  ClipBoard.AsText + #13 +#13
                           + 'Czy chcesz uruchomić stronę w nowym oknie?'),PAnsiChar('Url-przechwyciłem adres strony www'),MB_YesNo) = ID_Yes Then
                  ShellExecute(0,'Open',PAnsiChar('iexplore.exe'),PAnsiChar(ClipBoard.AsText),nil,Sw_ShowDefault);
               If Not(pos('@',ClipBoard.AsText) = 0) then
               If MessageBox(0,PAnsiChar(
                             'W schowku prawdopodbnie znajduje się adres Email :'+ #13 + #13
                           + ClipBoard.AsText + #13 + #13
                           + 'Czy chcesz napisać do : ' + (Copy(ClipBoard.AsText,1,Pos('@',ClipBoard.AsText)-1))+' ?'),PAnsiChar('Url-przechwyciłem adres email'),MB_YesNo) = ID_Yes Then
                  ShellExecute(0,'open',PAnsiChar('mailto:' + ClipBoard.AsText),nil,nil,SW_ShowDefault);
              End;
            Ul := ClipBoard.AsText;
           End
        Else
       Ul:='';
     Finally
     end;
     If Ex = 1 then Goto loops;
     Sleep(1000); // Sprawdzaj raz na sekundę
     Goto Loop;
Loops:
    ShowMessage('Skleił oraz modyfikacji dokonał' + #13 +
                '(c)2003 netvalker' + #13 +
                '[email protected]' + #13 + #13 +
                'Nastąpi zamknięcie programu...');
    Application.Terminate;
End.
0

Dzięki... a teraz trudniej... Mam stringa powiedzmy: 'Zajrzyj na stronę www.xxxxxx.pl i wejdź na forum.'. Jak wykryć czy w tym stringu jest adres URL i jak na początku i końcu URLa coś dopisać ?

0
wala napisał(a)

Dzięki... a teraz trudniej... Mam stringa powiedzmy: 'Zajrzyj na stronę www.xxxxxx.pl i wejdź na forum.'. Jak wykryć czy w tym stringu jest adres URL i jak na początku i końcu URLa coś dopisać ?

Jeżeli w stringu jest 1 adres to sprawa prosta:

const
  urlconst: array [0..2] of string[10] = ('http://',  'ftp://', 'www.');
var
  i, p1, p2: integer;
  s, s1, s2: string;
begin
  s:= 'Zajrzyj na stronę www.xxxxxx.pl i wejdź na forum.';
  s1:= 'tekst pierwszy';
  s2:= 'tekst drugi';

  for i:=Low(urlconst) to High(urlconst) do
  begin
    p1:= Pos(urlconst[i], s);
    if (p1 > 0) then
    begin
      p2:= p1;
      while ((s[p2] <> ' ') and (p2 <= Length(s))) do
        Inc(p2);
      Insert(s1, s, p1);
      p2:= p2 + Length(s1);
      Insert(s2, s, p2);
      break;
    end;
  end;
  ShowMessage(s);
end;

EDIT//

Adam.Pilorz napisał(a)

drobne sprostowanie: http://, nie http:\

Dzięki, poprawiłem.

0

drobne sprostowanie: http://, nie http:\

1 użytkowników online, w tym zalogowanych: 0, gości: 1