Hiperłącze

dział ogólny

Hiperłącze

Nowy postprzez Pitek » niedziela, 20 grudnia 2009, 22:25

Witam !
Moje pytanie :
Czy da się wstawić hiperłącza do strony www i e-mail w MessageBox i jak tak to jak?
I nie tworząc osobnego tematu czy da się w komponencie ListBox zrobić taką żecz że gdy używam programu na podtawie tutoriali Barona związanych z FTP to po przepełnieniu tego komponentu pojawia się scroll ale chciałbym aby schodził on cały czas na dół bez mojej ingerencji w miare dodawania się nowych lini poprzez różne akcje na FTP jeżeli się da to zrobić to jak ?
Bradzo proszÄ™ o odpowiedz.
Pozdrawiam
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Cyfrowy Baron » poniedziaÅ‚ek, 21 grudnia 2009, 10:07

Co do MessageBox to się tak nie da, ale możesz stworzyć własny MessageBox. Tworzysz nowy formularz, który wyglądem przypomina MessageBox. W tym celu ustawiasz właściwość BorderStyle formularza na bsDialog, a Position na poDesktopCenter lub poScreenCenter. Pozostaje jeszcze umieszczenie obiektu Label, który będzie działał jak hiperłącze, To wymaga specjalnego kodu:

Kod: Zaznacz cały
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UnitMsg.h"
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMsg *FormMsg;
//---------------------------------------------------------------------------
__fastcall TFormMsg::TFormMsg(TComponent* Owner)
    : TForm(Owner)
{
OldLabelH = Label2->WindowProc;
Label2->WindowProc = NewLabelH;

// Ustawianie kursora rączki dla hiperłącza
HCURSOR HAND = LoadCursor(NULL, IDC_HAND);
Screen->Cursors[1] = HAND;
Label2->Cursor = (TCursor)1;

// Wczytywanie ikony hiperłącza z pliku shell32.dll
char SysDir[MAX_PATH];
GetSystemDirectory(SysDir, MAX_PATH);
strcat(SysDir, "\\shell32.dll");
Image1->Picture->Icon->Handle = ExtractIcon(Application->Handle, SysDir, 91);
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::NewLabelH(TMessage &Msg)
{
  if(Msg.Msg == CM_MOUSEENTER)
  {
    Label2->Font->Color = clRed;
    Label2->Font->Style = Label2->Font->Style << fsUnderline;
  }
  else if(Msg.Msg == CM_MOUSELEAVE)
  {
   Label2->Font->Color = clBlue;
   Label2->Font->Style = Label2->Font->Style >> fsUnderline;
  }
  OldLabelH(Msg);
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::Button1Click(TObject *Sender)
{
Close();   
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::Label2Click(TObject *Sender)
{
  Label2->Font->Color = (TColor)0x00400080;
  Application->ProcessMessages();
  ShellExecute(GetDesktopWindow(), NULL,
               "http://cyfbar.republika.pl", "", "", SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
void __fastcall TFormMsg::FormClose(TObject *Sender, TCloseAction &Action)
{
Label2->WindowProc = OldLabelH;
}
//---------------------------------------------------------------------------


Całość jest jednak o wiele bardziej złożona, więc w załączniku masz przykład:

hipermsg.zip




W celu przesunięcia pasków przewijania na sam dół listy ListBox należy za pomocą kodu w jakimś zdarzeniu zaznaczać ostatnią pozycję na liście:

Kod: Zaznacz cały
  ListBox1->ItemIndex = ListBox1->Items->Count - 1;
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Pitek » poniedziaÅ‚ek, 21 grudnia 2009, 15:42

Bardzo dziękuję jednak mam z tym proble jeżeli chodzi o hiperłącze to wyskakują mi dwa błędy :
Kod: Zaznacz cały
[BCC32 Error] UnitMsg.cpp(28): E2034 Cannot convert 'HWND__ * const' to 'HINSTANCE__ *'

[BCC32 Error] UnitMsg.cpp(28): E2342 Type mismatch in parameter 'hInst' (wanted 'HINSTANCE__ *', got 'HWND__ *')

Dla tej lini kodu :
Kod: Zaznacz cały
Image1->Picture->Icon->Handle = ExtractIcon(Application->Handle, SysDir, 91);

A z ListBox to nie wiem do którego zdarzenia to wsadzić bo mi żadne nie chce działać ;/
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Witold » poniedziaÅ‚ek, 21 grudnia 2009, 16:06

pitek3010 napisał(a):Bardzo dziękuję jednak mam z tym proble jeżeli chodzi o hiperłącze to wyskakują mi dwa błędy



Kod: Zaznacz cały
#include <SysInit.hpp>
...
Image1->Picture->Icon->Handle = ExtractIcon(HInstance, SysDir, 91);
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Pitek » poniedziaÅ‚ek, 21 grudnia 2009, 16:31

Bardzo dziękuję działa !
Nie mogę sobie jednak poradzić z tym aby scroll w ListBox był cały czas na dole otrzymałem już kod od Barona ale nie wiem gdzie go wsadzić.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Cyfrowy Baron » wtorek, 22 grudnia 2009, 10:27

Nie mogę sobie jednak poradzić z tym aby scroll w ListBox był cały czas na dole otrzymałem już kod od Barona ale nie wiem gdzie go wsadzić.


Kod: Zaznacz cały
void __fastcall TForm1::IdFTP1Status(TObject *ASender,
        const TIdStatus AStatus, const AnsiString AStatusText)
{
   ListBox1->Items->Add(IntToStr(AStatus)+ ". " + AStatusText);
   ListBox1->ItemIndex = ListBox1->Items->Count - 1;                // < tutaj
   Application->ProcessMessages();

}




Bardzo dziękuję jednak mam z tym proble jeżeli chodzi o hiperłącze to wyskakują mi dwa błędy:


To dziwne, używasz C++Builder 2010, sprawdziłem podany kod w tym środowisku i działa bez zarzutu. Włączyłem wszystkie ostrzeżenia i wciąż żadnych uwag do podanego kodu.

Po kilku minutach i porównaniu ustawień:

Jeżeli we właściwościach projektu - menu: Project -> Options w sekcji Directories and Conditionals w tabeli (prawa strona) we właściwości Conditional defines zostanie wprowadzona wartość NO_STRICT to projekt skompiluje się bez błędów z podanym kodem.

Tryb NO_STRICT wyłącza jednak szukanie przez kompilator błędów i pomyłek, dlatego kod daje się skompilować mimo błędów. Dlatego nie polecam tego trybu, chyba, że inaczej się już nie da.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Pitek » wtorek, 22 grudnia 2009, 16:58

Dziękuję już wszystko jasne, działa !
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez wargo » wtorek, 22 grudnia 2009, 20:39

Jeżeli chodzi o hyperlink to da się to prościej zrobić ustawiając odpowiednie właściwości za pomocą inspektora obiektów
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Cyfrowy Baron » wtorek, 22 grudnia 2009, 20:41

Czyli jak? Opisz to dokładnie.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez wargo » wtorek, 22 grudnia 2009, 20:46

Cursor - crHandPoint
Font
-Color: clBlue
-Efekty: podkreślenie (okno po kliknięciu na TFont)

W już TLabel wygląda jak link!

Potem należy ustawić w onClick otwieranie adresu.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Hiperłącze

Nowy postprzez Cyfrowy Baron » wtorek, 22 grudnia 2009, 22:58

No niestety to nie tak. Hiperlink zachowuje się inaczej, nie wystarczy, że wygląda jak hiperlink, musi się też zachowywać odpowiednio. czyli początkowo hiperlink nie jest podkreślony, po najechaniu myszką zostaje podkreślony i zmienia kolor, po zjechaniu myszką z hiperlinka wraca kolor poprzedni i znika podkreślenie.

Kolejna sprawa to kursor rączki, gdy ustawisz go w inspektorze obiektów, to taki kursor będzie wczytywany z zasobów programu, więc jeżeli ktoś ma ustawione w systemie inne kursory niż standardowe, to rączka i tak będzie taka jak w zasobach. Podany przeze mnie kod wczytuje kursor systemowy, czyli jest to kursor taki, jaki ustwił sobie użytkownik w systemie.

Pobierz przykładowy program z załącznika i zobaczysz jak zachowuje się hiperlink.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana


Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość