Priklad v Delphi

Sekcia: Programovanie 04.01.2009 | 12:03
Avatar ninu Slackware, Android  Používateľ
Dobry den,

programujem v Delphi 7, teda mam nejake zaklady zo skoly ale nic moc. Nejake matematicke prikladiky, nieco jednoduche z grafiky a Objektoveho programovania.

V com je teda problem ?

Chcem by som si spravit taky prikladik, ktory by dokazal nasledovne:

Ked si oznacim hocijaky text, napr. z web stranky, automaticky by sa mi ulozil do pamate (ako pri Ctrl+C) a nasledne by som ho potom uz ulozil do nejakeho Mema na Formulari.

Toto je asi hlavna cast programu s ktorou si neviem rady.
Cize neviem ako docielit aby sa oznaceny text skopiroval do pamate a potom vlozil z pamate do Mema.

Da sa to nejak spravit ?

Budem vdacny za kazdu radu
Slackware
    • Re: Priklad v Delphi 04.01.2009 | 13:23
      thomas   Návštevník

      oznaceni textu a pak jeho vlozeni kdekoli (kliknutim koleckem mysi) funguje snad i v gnome
      • Re: Priklad v Delphi 04.01.2009 | 13:34
        Avatar ninu Slackware, Android  Používateľ
        Nejaksi som ta nepochopil.

        Ja potrebujem napisat program v Delphi. (teda potrebujem je silne slovo, skor chcel by som)
        Slackware
    • Re: Priklad v Delphi 04.01.2009 | 14:35
      Avatar Miroslav Bendík Gentoo  Administrátor
      Otázka: čo to má spoločné s linuxom a prečo by práve linuxáci mali vedieť urobiť program na vypísanie správnej odpovede?
      • Re: Priklad v Delphi 04.01.2009 | 15:48
        Avatar ninu Slackware, Android  Používateľ
        Takto, na toto forum chodim uz asi rok a taky isty cas pouzivam aj Linux a strasne vela veci som sa dozvedel prave na tomto fore.
        Ze co to ma spolocne s Linuxom nato ti neviem odpovedat, len som dufam, ze ked sa v sekcii Programovanie na nieco taketo spytam, tak mi bude niekto vediet odpovedat.
        Ja chcem len radu ci sa to da spravit a ak ano ako ?

        Okrem toho, niekolko tem nizsie som cital presne prispevok od Teba a tiez si sa pytal na Delphi, tak som dufal ze aj mne niekto ohladom toho dokaze poradit.

        Prečo by práve linuxáci mali vedieť urobiť program na vypísanie správnej odpovede?
        Pretoze medzi Linuxákmi je vela dobrých programátorov, ktorí majú ovela vacsi rozhlad ako ja. Napr. som si isty ze aj ty medzi nich patris.
        Slackware
    • Re: Priklad v Delphi 04.01.2009 | 15:22
      Avatar borg Fedora  Administrátor
      skus pozriet API pre tvoje prostredie. pochybujem ze bude existovat nejaky binding pre delphi, a takisto neviem ci sa da v delphi pouzit iny binding API ako pre delphi (napr. pre c/c++).
    • Re: Priklad v Delphi 04.01.2009 | 16:00
      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
      Treba zachytit spravu WM_DRAWCLIPBOARD - V protected casti formulara vytvor tuto proceduru:
        procedure WMDRAWCLIPBOARD(var Message: TWMDRAWCLIPBOARD); message WM_DRAWCLIPBOARD;
      

      Potom v tej procedure sprav toto:
        procedure TForm1.WMDRAWCLIPBOARD(var Message: TWMDRAWCLIPBOARD);
        begin
          inherited;
          if clipboard.HasFormat(CF_TEXT) then
             memo1.PasteFromClipboard;
        end;
      

      Do uses sekcie pridaj unit "clipbrd"
      • Re: Priklad v Delphi 04.01.2009 | 17:45
        Avatar ninu Slackware, Android  Používateľ
        Kde presne sa nachadza Protected cast formulara ?
        Toto mi nic nehovori ...
        Slackware
        • Re: Priklad v Delphi 04.01.2009 | 18:36
          Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
          Hned za klucovym slovom "protected".
          type
            TForm1 = class(TForm)
              Button1...       -- uz toto tu je asi protected cast
              Memo1...
            private
              ...
            protected             // toto dopis
              procedure ...     // toto je deklaracia tej procedury
            public
              ...
            published
              ....
            end;
          
          implementation
          
          ... sem definuj tu proceduru
          

          Inak pripajam sa k ostatnym ze toto nie je diskusne forum o programovani ale o programovani v linuxe a takyto post tu nema co robit. Nabuduce sa pytaj na www.builder.cz, sekcia Delphi.
          • Re: Priklad v Delphi 05.01.2009 | 13:22
            Avatar ninu Slackware, Android  Používateľ
            OK, uznavam ze som napisal asi na zle forum, ale neratal som stym ze ma porad odfajcite ze preco to pisem sem. OK ospravedlnujem sa.

            Ale, ja toto iste potrebujem spravit aj v Linuxe, najlepsie v Lazaruse ktory mam nahodeny a ktory je najblizsi k Delphi, takze aj preto som to napisal na toto forum.

            Okrem toho este otazocka, ako mam zavolat tu proceduru ? Chce to este nejaky parameter, len netusim aky. Mam tu proceduru dat do nejakeho buttonu ?
            Slackware
            • Re: Priklad v Delphi 05.01.2009 | 14:02
              Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
              nie, tu proceduru nijak nevolas, ona sa zavesi na spravu VM_nieco a ked nieco vlozis to clipboardu, napr. vo firefoxe, tak sa sama spusti tato procedura. Hod tam breakpoint a vyskusaj to.
              • Re: Priklad v Delphi 05.01.2009 | 14:07
                Avatar ninu Slackware, Android  Používateľ
                neviem co mas na mysli pod breakpointom

                Zatial som spravil to, ze som na formular hodil jeden memo dopisal som to co si poradil, ale zatial to nic nerobi. Oznacim nieco napr vo Firefoxe dam ctrl+c a nic sa nestane, ten program je samozrejme spusteny ...
                Slackware
                • Re: Priklad v Delphi 05.01.2009 | 15:00
                  Avatar borg Fedora  Administrátor
                  spustis v debugery, nastavis breakpoint na tu funkciu, spustis a krokujes. breakpoint znemna, kde ma debuger zastavit program
                  • Re: Priklad v Delphi 05.01.2009 | 15:11
                    Avatar ninu Slackware, Android  Používateľ
                    ok, dal som tam ten breakpoint (taka cervena bodka pri procedure), ale po spusteni programu to nic nerobi, vidim len prazdne memo ...
                    Slackware
                • Re: Priklad v Delphi 05.01.2009 | 15:09
                  Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                  Hod sem cely vypis unit1.pas, urcite si nieco zle opisal
                  • Re: Priklad v Delphi 05.01.2009 | 15:13
                    Avatar ninu Slackware, Android  Používateľ
                    Tu je :

                    unit Unit1;

                    interface

                    uses
                    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
                    Dialogs, clipbrd, StdCtrls;

                    type
                    TForm1 = class(TForm)
                    Memo1: TMemo;
                    private
                    { Private declarations }

                    protected
                    procedure WMDRAWCLIPBOARD(var Message: TWMDRAWCLIPBOARD); message WM_DRAWCLIPBOARD;

                    public
                    { Public declarations }
                    end;

                    var
                    Form1: TForm1;

                    implementation

                    {$R *.dfm}

                    procedure TForm1.WMDRAWCLIPBOARD(var Message: TWMDRAWCLIPBOARD);
                    begin
                    inherited;
                    if clipboard.HasFormat(CF_TEXT) then
                    memo1.PasteFromClipboard;
                    end;



                    end.
                    Slackware
                    • Re: Priklad v Delphi 05.01.2009 | 15:22
                      Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                      Sory, moja chyba, este tam pridaj toto:
                      procedure TForm1.FormCreate(Sender: TObject);
                      begin
                        SetClipboardViewer(self.Handle);
                      end;
                      
                      • Re: Priklad v Delphi 05.01.2009 | 15:31
                        Avatar ninu Slackware, Android  Používateľ
                        OK, dakujem uz to funguje.

                        Este som sa chcel spytat ci by sa ta procedura dala nejak zavolat aj keby som pouzil CASE , cize po stlaceni nejakej klavesy by sa vykonali nejake prikazy medzi ktorimi by bola aj tato procedura.
                        Slackware
                        • Re: Priklad v Delphi 05.01.2009 | 18:38
                          Avatar ninu Slackware, Android  Používateľ
                          No jakko, dalo by sa to spravit ?
                          Slackware
                          • Re: Priklad v Delphi 06.01.2009 | 00:26
                            Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                            • Re: Priklad v Delphi 06.01.2009 | 11:00
                              Avatar ninu Slackware, Android  Používateľ
                              Chcem dosiahnut to, aby sa stlacenie nejakej klavesy spravilo to ze sa do mema vlozi ten obsah ClipBoardu.

                              Ide o to, ze teraz sa ta procedure vykona automaticky sama, ale ja by som chcel aby sa vykonala az na moj povel.
                              Slackware
                              • Re: Priklad v Delphi 06.01.2009 | 19:42
                                Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                Pridas komponent ActionList (alebo take nieco, je to na prvej zalozke posledna ikona)
                                Pridas akciu, nastavis jej shortcut napr. na X, 2x kliknes na akciu, vytvori ti to obsluhu udalosti tej akcie
                                tam napises: Memo1.PasteFromClipboard
                                takato klavesova skratka funguje len v aplikacii
                                • Re: Priklad v Delphi 07.01.2009 | 10:16
                                  Avatar ninu Slackware, Android  Používateľ
                                  Vyborne presne toto som potreboval vediet, teraz vlastne tu proceduru v casti protected vobec nepotrebujem nie ? Ide to aj bez toho ...

                                  Este by som sa chcel spytat, ako sa da spravit aby sa mi ten program minimalizoval do SystemTray...

                                  Dakujem
                                  Slackware
                                  • Re: Priklad v Delphi 07.01.2009 | 10:48
                                    Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                    http://subsimple.com/download/CoolTrayIcon.zip
                                    • Re: Priklad v Delphi 07.01.2009 | 12:22
                                      Avatar ninu Slackware, Android  Používateľ
                                      Diky, funguje to ale nie celkom, netusim totiz ako sa to da naspat maximalizovat z toho SystemTray, klikam nato jak besny a neide to spat maximalizovat ...
                                      Slackware
                                      • Re: Priklad v Delphi 07.01.2009 | 13:14
                                        Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                        udalost onClick tej ikony:

                                        Application.ShowMainForm := true;
                                        Show;
                                        Application.Restore;
                                        Application.BringToFront;
                                        • Re: Priklad v Delphi 07.01.2009 | 13:59
                                          Avatar ninu Slackware, Android  Používateľ
                                          Diky uz to funguje ako ma ...
                                          Slackware
                                        • Re: Priklad v Delphi 07.01.2009 | 16:43
                                          Avatar ninu Slackware, Android  Používateľ
                                          Este taky detailik, ako by som mohol ulozit obsah toho ClipBoardu do nejakej premennej aby som snou mohol pracovat ako s texom ?

                                          Napr. pridavat knej nejaky text, znaky ...
                                          Slackware
                                          • Re: Priklad v Delphi 07.01.2009 | 16:53
                                            Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                            var premenna : string;
                                            memo1.pastefromclipboard;
                                            premenna := memo1.lines.text;

                                            alebo

                                            memo1.pastefromclipboard;
                                            premenna := '';
                                            if memo1.lines.Count>0 then
                                            premenna := memo1.lines[0];
                                            • Re: Priklad v Delphi 07.01.2009 | 16:59
                                              Avatar ninu Slackware, Android  Používateľ
                                              bez toho aby sa mi to zapisalo do mema sa to neda ?
                                              Myslim hodit to nejak hned do premennej ...
                                              Slackware
                                            • Re: Priklad v Delphi 07.01.2009 | 17:22
                                              Avatar ninu Slackware, Android  Používateľ
                                              OK, toto som uz vyriesil (pomocou Editu) , mam ale jeden problemik s Memom.

                                              Ono ja tam vlozim nejaky text napr. uz klipboardu ale chcem este v tom riadku pokracovat a chcem tam nieco este vlozit, zdorazdnujem ze do toho isteho riaka a za prvy text, lenze v Memo ma hodi do nasledujuceho riadka.
                                              Slackware
                                              • Re: Priklad v Delphi 08.01.2009 | 00:39
                                                Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                Memo1.SelStart := Memo1.SelStart - 1; (alebo -2 ak je koniec #10#13),
                                                a tiez vkladat text cez trim(s)
                                                • Re: Priklad v Delphi 08.01.2009 | 10:04
                                                  Avatar ninu Slackware, Android  Používateľ
                                                  Preco prave cez trim a co to vlastne je a naco sluzi ? Poprosil by som nejaky nazorny priklad ako sa pouziva tato funkcia aj s memom.
                                                  Slackware
                                                  • Re: Priklad v Delphi 08.01.2009 | 12:22
                                                    Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                    var s : string;
                                                    begin
                                                    s := ' Hello World '#10#13;
                                                    s := Trim(s); // 'Hello World' - bez bielych znakov
                                                    ShowMessage(s);
                                                    end;
                                                • Re: Priklad v Delphi 08.01.2009 | 10:12
                                                  Avatar ninu Slackware, Android  Používateľ
                                                  Takto ono mi to ma spravit to, ze po stlaceni prveho tlacidla sa mi vlozi do mema nejaky text a ked stlacim druhe tlacidlo vlozi sa dalsi text z clipboardu za prvy text.

                                                  to druhe tlacidlo zatial vyzera takto:

                                                  Edit1.PasteFromClipboard;
                                                  a:=Edit1.Text;
                                                  Memo1.SelStart:=Memo1.SelStart - 1;
                                                  Memo1.Lines.Append('/*/*/*/*/*/ '+a);


                                                  ale nefunguje to
                                                  Slackware
                                                  • Re: Priklad v Delphi 08.01.2009 | 12:19
                                                    Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                    Edit1.Text := '';
                                                    Edit1.PasteFromClipboard;
                                                  • Re: Priklad v Delphi 08.01.2009 | 12:32
                                                    Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                      // vlozime do memo1 na polohu kurzoru text z clipboardu ale len prvy riadok
                                                      Memo1.SelLength := 0;
                                                      with TStringList.Create do
                                                      begin
                                                        Text := ClipBoard.AsText;
                                                        if Count > 0 then
                                                          Memo1.SelText := Strings[0];
                                                        Free;
                                                      end;
                                                    
                                                      // vlozime do memo2 cely text z clipboardu
                                                      Memo2.SelLength := 0;
                                                      Memo2.SelText := ClipBoard.AsText;
                                                    
                                                      // vlozime do memo3 cely text z clipboardu ale vynechame prazdne riadky na konci
                                                      Memo3.SelLength := 0;
                                                      Memo3.SelText := trim(ClipBoard.AsText);
                                                    

                                                    Ak ani jedno nie je to co chces, napis presne co vlastne chces.
                                                    • Re: Priklad v Delphi 08.01.2009 | 13:59
                                                      Avatar ninu Slackware, Android  Používateľ
                                                      Takto to poviem.
                                                      http://img113.imageshack.us/my.php?image=projektip7.png

                                                      Presne toto potrebujem dosiahnut ...
                                                      Slackware
                                                      • Re: Priklad v Delphi 08.01.2009 | 14:00
                                                        Avatar ninu Slackware, Android  Používateľ
                                                        konkretne potrebujem vyriesit to s tou stlacenou dvojkou, aby sa to vlozilo do toho isteho riadka ...
                                                        Slackware
                                                      • Re: Priklad v Delphi 08.01.2009 | 14:23
                                                        Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                        screenshot tu: foto
                                                        procedure TForm1.Button1Click(Sender: TObject);
                                                        begin
                                                          Memo1.Lines.Text := Memo1.Lines.Text + '*** Macko Pu ';
                                                        end;
                                                        
                                                        procedure TForm1.Button2Click(Sender: TObject);
                                                        begin
                                                          Memo1.Lines.Text := Memo1.Lines.Text + '/*/*/*/*/* http://wazer.xx'#13#10#13#10;
                                                        end;
                                                        
                                                        procedure TForm1.Button3Click(Sender: TObject);
                                                        begin
                                                          Memo1.Lines.Text := Memo1.Lines.Text + 'http:rapid'#13#10'rapid'#13#10'rapid'#13#10#13#10;
                                                        end;
                                                        
                                                        • Re: Priklad v Delphi 08.01.2009 | 15:17
                                                          Avatar ninu Slackware, Android  Používateľ
                                                          ja som to aj takto nejak podobne skusal akurat bez toho #13#10 -- co to vlastne znamena ? naco to je ?
                                                          Slackware
                                                          • Re: Priklad v Delphi 08.01.2009 | 15:29
                                                            Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                            Ascii znaky 13 a 10 (decimalne), t.j. CR LF (alebo naopak, teraz neviem), proste koniec riadku
                                                            • Re: Priklad v Delphi 08.01.2009 | 15:45
                                                              Avatar ninu Slackware, Android  Používateľ
                                                              ok, uz to funguje ako ma ale ...

                                                              ked stlacim 1,2,3 spravi to tak ako som chcel, lenze ked stlacim znova 1,2,3 tak to znova spravi to iste ale znova v tom prvom riadku, ja chcem aby dalej uz pokracoval do dalsich riadkov, namiesto toho sa mi to znova cele prepise ...

                                                              Cize inak povedane ak je Memo prazdne, zacne od prveho riadka, ale ak nie tak nech pokracuje za poslednym riadkom kde je text.
                                                              Ako sa nastavim na koniec Mema ?
                                                              Slackware
                                                              • Re: Priklad v Delphi 08.01.2009 | 16:32
                                                                Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                                • Re: Priklad v Delphi 08.01.2009 | 16:41
                                                                  Avatar ninu Slackware, Android  Používateľ
                                                                  Obrazok je ten isty ako tvoj vyssie ...
                                                                  Problem je vtom, ze ked znova stlacim 1, tak sa cele memo vymaze a vlozi sa tam ten dany text ...

                                                                  ja potrebujem aby to pokracovalo dalej, lebo nakoniec to chcem cele ulozit do txt dokumentu.

                                                                  Priklad :
                                                                  *** Macko Pu /*/*/*/*/*/ http://www.blabla.com

                                                                  http://rapid
                                                                  http://rapid
                                                                  http://rapid

                                                                  -----tu aby to dalej znova pokracovalo, cize znova sa da pridat dalsie z clipboardu

                                                                  *** Macko Pu /*/*/*/*/*/ http://www.blabla.com

                                                                  http://rapid
                                                                  http://rapid
                                                                  http://rapid

                                                                  .
                                                                  .
                                                                  .

                                                                  atd...
                                                                  Slackware
                                                                • Re: Priklad v Delphi 08.01.2009 | 16:47
                                                                  Avatar ninu Slackware, Android  Používateľ
                                                                  Pri stlaceni 1 sa nastavy na koniec mema ak tam uz nieco je zapisane a potom tam prida to *** Macko Pu
                                                                  Slackware
                                                                  • Re: Priklad v Delphi 08.01.2009 | 17:00
                                                                    Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                                                                    To ale v povodnom obrazku nebolo.
                                                                    • Re: Priklad v Delphi 08.01.2009 | 17:38
                                                                      Avatar ninu Slackware, Android  Používateľ
                                                                      Este raz, diky za pomoc ...
                                                                      Slackware
              • Re: Priklad v Delphi 05.01.2009 | 14:59
                Avatar borg Fedora  Administrátor
                neodchytava to nahodou spravy len pre dane okno tej aplikacie?
                • Re: Priklad v Delphi 05.01.2009 | 15:08
                  Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                  nie, v celom windows, vyskusane, 100% funkcne, pouzivam to na robenie screenshotov aplikacii (tam tusim zachytavam CF_BITMAP) ale kod je rovnaky.
                  • Re: Priklad v Delphi 05.01.2009 | 15:10
                    Avatar borg Fedora  Administrátor
                    ok, len som sa pytal, pod windows oknoidne apps moc nerobim
                    • Re: Priklad v Delphi 05.01.2009 | 15:29
                      WlaSaTy   Návštevník
                      Ty koki, to je potom este lahsie odchytit heslo ako v xwindows. Nepoznate niekoho vo pouziva nejaky password manager co da heslo do clipboardu? Mozno by to fungovalo cez wine.
                      • Re: Priklad v Delphi 05.01.2009 | 15:39
                        Avatar borg Fedora  Administrátor
                        no staci mozno odpocuvat len spravy pre jednotlive klavesy, ktore boli stlacene. klasicky keylogger. nie len clipboard. preto sa mi to nezdalo, ze cudzia aplikacia prijima spravy od inych okien cudzej aplikacie. som bol v tom, ze windows disribuuje spravy jednotlivym oknam podla handlu na okno, a okno sa tak nemusi starat od cudzie spravy.
                        • Re: Priklad v Delphi 05.01.2009 | 17:07
                          WlaSaTy   Návštevník
                          V pripade spravcu hesiel odchytis tak akurat master heslo ktore ti je bez toho zakryptovaneho suboru na nic. Je pravda ze v pripade keyloggera uz mas pristup aj na disk, ale to by o nom musel vediet. Wallet manager (spravca hesiel) obvykle vypluje heslo do clipboardu, ak sa jedna o NT verziu.

                          Ale inak s tou hierarchiou, windos naozaj distribuuje spravy jednotlivym oknam, pokial sa nejedna o broadcast (verejnu spravu) alebo pokial aplikacia nezavesi hook. Smola je v tom, ze clipboard je verejna schranka a tak ju asi vidi vselico.
                          • Re: Priklad v Delphi 05.01.2009 | 17:24
                            Avatar Zefram Cochrane MS Windows Vista Ultimate 64bi  Používateľ
                            Zachytavanie spravy o zmene na clipboarde nema s bezpecnostou nic spolocne a jej potlacenie operacnym systemom by bez uplneho zahazu clipboardu nicomu nepomohlo, namiesto zachytavania tej spravy by stacilo pouzit:
                            while true do
                            begin
                              s1 := VezmiTextZClipboardu;
                              if s1 <> s2 then
                                Memo1.Lines.Add('Zmena v clipboarde: '+s1);
                              s2 := s1;
                              sleep(10);
                            end;
                            

                            Zachytavanie spravy OS je teda efektivnejsie a menej obskurne riesenie.
                            • Re: Priklad v Delphi 05.01.2009 | 17:47
                              WlaSaTy   Návštevník
                              Ano, clipboard je verejny majetok daneho uzivatela ale to nic nemeni na tom ze zachytavanie neverejnych sprav inymi aplikaciami alebo uzivatelmi je bezpecnostne riziko.

                              PS.: uz som zazil stroje ktore mali vypnuty clipboard. Nikdy som sa nedozvedel ze ci sa jednalo o pseudobezpecnostny krok alebo len jednoducho padla ta servisa.