Priklad v Delphi
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
Pre pridávanie komentárov sa musíte prihlásiť.
oznaceni textu a pak jeho vlozeni kdekoli (kliknutim koleckem mysi) funguje snad i v gnome
Ja potrebujem napisat program v Delphi. (teda potrebujem je silne slovo, skor chcel by som)
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.
Potom v tej procedure sprav toto:
Do uses sekcie pridaj unit "clipbrd"
Toto mi nic nehovori ...
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.
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 ?
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 ...
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.
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.
Ide o to, ze teraz sa ta procedure vykona automaticky sama, ale ja by som chcel aby sa vykonala az na moj povel.
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
Este by som sa chcel spytat, ako sa da spravit aby sa mi ten program minimalizoval do SystemTray...
Dakujem
Application.ShowMainForm := true;
Show;
Application.Restore;
Application.BringToFront;
Napr. pridavat knej nejaky text, znaky ...
memo1.pastefromclipboard;
premenna := memo1.lines.text;
alebo
memo1.pastefromclipboard;
premenna := '';
if memo1.lines.Count>0 then
premenna := memo1.lines[0];
Myslim hodit to nejak hned do premennej ...
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.
a tiez vkladat text cez trim(s)
begin
s := ' Hello World '#10#13;
s := Trim(s); // 'Hello World' - bez bielych znakov
ShowMessage(s);
end;
to druhe tlacidlo zatial vyzera takto:
Edit1.PasteFromClipboard;
a:=Edit1.Text;
Memo1.SelStart:=Memo1.SelStart - 1;
Memo1.Lines.Append('/*/*/*/*/*/ '+a);
ale nefunguje to
Edit1.PasteFromClipboard;
Ak ani jedno nie je to co chces, napis presne co vlastne chces.
http://img113.imageshack.us/my.php?image=projektip7.png
Presne toto potrebujem dosiahnut ...
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 ?
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...
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.
Zachytavanie spravy OS je teda efektivnejsie a menej obskurne riesenie.
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.