Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

строки.... [D7, XP]


Страницы:   1 2 3 4

Steep ©   (2008-02-11 23:06:00) 

суть такая берем первый Memo (текст примерно такой):

Linkin Park, Era, Ария, Evanescence, Limp Bizkit, DMX, 50 Cent, Slipknot, Nightwish,
Rammstein, Enya, Papa Roach, Король и Шут, Blink 182, Apocaliptica, Benny Benassi,
Alizee, Nickelback, Nirvana, Powerman 5000, The Black Eyed Peace, Наив,
Cranberries, Moby, Ludacris, Tokia Hotel, Three Days Grace, Nelly Furtado, Metallica,
HIM, Prodigy, Brainstorm, Tiga, KoRn, Green Day, 666, Город 312, Roxette, Jay-Z, Rob
Zombie, Flipsyde, Justin Timberlake, Сплин, Дельфин, Timbaland, placebo, zdob si
zdub, Paul Van Dyk, all american rejects, Guano Apes, Lordi, Lost prophets, Rihanna,
Global Deejays, Die Apokalyptischen Reiter, Пилигрим, Легалайз, Morcheeba, Akon,
Pink, Bob Sinkler, Gregorian, The Killers, Fort Minor


потом ищем до запятой копируем в Memo2 вроде бы все работает
НО почемуто после некоторых названии в Memo2 появляются пустые строки...
например после: Nightwish, Benny Benassi, Наив, Metallica и тд.

код сканирование текста

procedure TForm1.Button1Click(Sender: TObject);
var
 AllText: string;
 x: boolean;
 tmp: string;
 tmppos: integer;
begin
 x := false;
 AllText := Memo1.Text;
 repeat
 tmppos := pos(', ', AllText);
 if tmppos<>0 then
   begin
       //Showmessage(AllText);
     tmp := copy(AllText, 1, tmppos-1 );
       //Showmessage('tmp: ' + tmp);
     Memo2.Lines.Append( tmp );
     delete(AllText, 1, tmppos+1 );
       //Showmessage(AllText);
   end
 else x := true;
 until x
end;


как недопустить их появления? в чем может быть ошибка?


ketmar   (2008-02-12 01:53:00) [21]

>[42] antonn © (2008-02-12 01:46:00)
>не имею склонности к подсчету чужих денег

да? так ты ещё и наглый врун.

[37]: «именно поэтому микрософт продает, зарабатывает и имеет бОльшую аудиторию, а ты сидишь в какой нибудь консоли и скрипишь зубами от зависти»

внимательно прочитаю обоснование причин, по которым эту фразу можно понять не как: «ты лузер, и бабла как m$ не зашибаешь (да ваще тебе еле на лекарства хватает!), сидишь где-то в мухосранске; вот начни зашибать как m$ (ну, или как я хотя бы) — тогда и говори что-то».

сливы и отмазы не прокатят. или признай, что ты лжец, или обоснуй свои слова.

---
Understanding is not required. Only obedience.


Steep   (2008-02-12 01:51:00) [22]

насчет клипборда...

допустим используем код

function SetClipboardText( const AText: string ): Boolean;
var
 h:THandle;
begin
 Clipboard.Open;
 Clipboard.AsText := AText;
 h := Clipboard.GetAsHandle(CF_TEXT);
 SetClipboardData(CF_LOCALE, h);
 Clipboard.Close;
end;


и затем SetClipboardText( MemoZpt.Text );

все работает
НО если пишем использовать эту процедуру на клавиши Ctr+C

procedure TFrm_Text.MemoZptKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = ord('C')) then
 begin
   SetClipboardText( TMemo(sender).selText );
 end;
end;


то нифига не работает - как я понял винда использует свои методы...
а на наши плюет...
то есть нужно либо полностью перекрывать... либо... либо что-то другое....
...
все мои мозги на сегодня получули - хорошую тряску....
пойду я спать - время у меня уже 4 утра.....
всем удачного времени суток...  а я уже сплю...


{RASkov}   (2008-02-12 01:51:00) [23]

> [36] Steep   (12.02.08 01:23)

Проще WM_COPY "поймать" нежели кнопки отслеживать, тем более что можно скопировать и "мышой" и другими сочетаниями "кнопок"....


antonn   (2008-02-12 01:46:00) [24]


> я так полагаю, ты плевать хотел на m$, и денег у тебя больше,
>  чем у них? я за тебя рад.
> если не больше — не вякай глупости, а?

не имею склонности к подсчету чужих денег :) Потому что завидовать - дурно.


> Германн ©   (12.02.08 01:42) [41]
>
> Сначала посмотри в зеркало и скажи тому, кого в нём увидишь.
>  Скажи ему несколько раз, пока тот, кто в зеркале, наконец-
> то поймет.

форум портит, я теперь тоже хочу вякать везде где можно, и желательно не в тему, и с направленной агрессией :)


Германн   (2008-02-12 01:42:00) [25]


> antonn ©   (12.02.08 01:32) [39]
>
>
> > Германн ©   (12.02.08 01:31) [38]
> >
> >
> > > antonn ©   (12.02.08 01:28) [37]
> >
> > Иногда лучше жевать.
>
> Вот и я ему говорю.
>

Сначала посмотри в зеркало и скажи тому, кого в нём увидишь. Скажи ему несколько раз, пока тот, кто в зеркале, наконец-то поймет.


ketmar   (2008-02-12 01:41:00) [26]

>[31] Игорь Шевченко © (2008-02-12 00:45:00)
тогда сначала научи, как добиться этого при помощи программного переключения раскладок. и чтобы юзер при сём не нервничал.


>[37] antonn © (2008-02-12 01:28:00)
я так рад, что ты обо мне много знаешь. можно, я тебе пожалуюсь? соседи постоянно в стену стучат: им мой скрип зубов по ночам спать мешает. я уже три вставных челюсти сточил, да…

я так полагаю, ты плевать хотел на m$, и денег у тебя больше, чем у них? я за тебя рад.
если не больше — не вякай глупости, а?

---
Understanding is not required. Only obedience.


antonn   (2008-02-12 01:32:00) [27]


> Германн ©   (12.02.08 01:31) [38]
>
>
> > antonn ©   (12.02.08 01:28) [37]
>
> Иногда лучше жевать.

Вот и я ему говорю.


Германн   (2008-02-12 01:31:00) [28]


> antonn ©   (12.02.08 01:28) [37]

Иногда лучше жевать.


antonn   (2008-02-12 01:28:00) [29]


> ketmar ©   (12.02.08 00:03) [19]

[17] прочитай внимательно, запиши на бумажке и запомни.
пользователи, они такие, тянутся к тому продукту, который проще и надежней. и не бьет палкой. именно поэтому микрософт продает, зарабатывает и имеет бОльшую аудиторию, а ты сидишь в какой нибудь консоли и скрипишь зубами от зависти.
%)


Steep   (2008-02-12 01:23:00) [30]

типо

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
begin
if (Shift = [ssCtrl]) and (Key = ord('C')) then
 begin
   скопировать выделенный текст в буфер в нормальном виде :)))
 end;
end;


Steep   (2008-02-12 01:10:00) [31]


> Это не то. Это я и сам умею. А мне надо, чтобы из любого
> Edit'а стандартным нажатием Ctrl+C в clipboard получался
> хороший русский текст.

наверно как то обрабатывать нажатие клавиш...


Steep   (2008-02-12 01:05:00) [32]

unit файл

unit RusClipboard;

interface

uses Clipbrd;

type
 TRusClipboard = class(TClipboard)
private
 procedure SetCodePage(const CodePage: longint);
public
 procedure Open; override;
 procedure Close; override;
end;

implementation

uses Windows;

{ TRusClipboard }

procedure TRusClipboard.Close;
begin
 SetCodePage($0419);
 inherited;
end;

procedure TRusClipboard.Open;
begin
 inherited;
 SetCodePage($0419);
end;

procedure TRusClipboard.SetCodePage(const CodePage: longint);
var
 Data: THandle;
 DataPtr: Pointer;
begin
 // Назначить кодовую страницу для буфера обмена
 Data:= GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, 4);
 try
   DataPtr := GlobalLock(Data);
   try
     Move(CodePage, DataPtr^, 4);
     SetClipboardData(CF_LOCALE, Data);
   finally
     GlobalUnlock(Data);
   end;
 except
   GlobalFree(Data);
 end;
end;

var
 FClipboard: TClipboard;
 OldClipboard: TClipboard;

initialization

 {Установить клипборд}
 FClipboard:= TRusClipboard.Create;
 OldClipboard:= SetClipboard(FClipboard);
 if OldClipboard <> nil then OldClipboard.Free;

end.


Игорь Шевченко   (2008-02-12 01:02:00) [33]

Steep   (12.02.08 00:58) [32]

Это не то. Это я и сам умею. А мне надо, чтобы из любого Edit'а стандартным нажатием Ctrl+C в clipboard получался хороший русский текст.


Steep   (2008-02-12 00:58:00) [34]

вот нашел....

procedure BufferToClipboard(Buffer: WideString);
var WideBuffer: WideString;
   BuffSize: Cardinal;
   Data: THandle;
   DataPtr: Pointer;
begin
 if Buffer <> '' then begin
   WideBuffer := Buffer;
   BuffSize := length(Buffer) * SizeOf(WideChar);
   Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE+GMEM_ZEROINIT, BuffSize + 2);
   try
     DataPtr := GlobalLock(Data);
     try
       Move(PWideChar(WideBuffer)^, Pointer(Cardinal(DataPtr))^, BuffSize);
     finally
       GlobalUnlock(Data);
     end;
     Clipboard.SetAsHandle(CF_UNICODETEXT, Data);
   except
     GlobalFree(Data);
     raise;
   end;
 end;
end;


вызов процедуры
BufferToClipboard(' hello world');


Игорь Шевченко   (2008-02-12 00:45:00) [35]

ketmar ©   (12.02.08 00:38) [29]


> и как можно добиться того же, но раскладку не дёргать?


Научи, а ? Я на самом деле не знаю "как добиться того же", чтобы из любых Delphi-ских Editов по стандартным командам копирования добиться вставки в юникодные программы корректного русского текста. Я серьезно.


ketmar   (2008-02-12 00:39:00) [36]

>[26] Johnmen © (2008-02-12 00:28:00)
хм. а, ну да. строки с пробелами кавычить надо. каюсь, забыл.

---
Understanding is not required. Only obedience.


ketmar   (2008-02-12 00:38:00) [37]

>[27] Steep (2008-02-12 00:34:00)
>неужели програмно переключать чтобы работало наверняка?

мегебаянЪ.

мне вот интересно, почему 99.9% вопрошающих про «кракозяблы в буфере обмена» никогда не задумываются, какое именно магическое действие совершает переключение раскладки, и как можно добиться того же, но раскладку не дёргать?

---
Understanding is not required. Only obedience.


Johnmen   (2008-02-12 00:36:00) [38]


> потомучто у меня не миллионы слов - а маленький код понять
> легче - ну если не понять то хотя бы меньше кода....

Если ты так реально считаешь, то ты не станешь программистом.
Да тебе, как я уже понял, и не надо...


Steep   (2008-02-12 00:34:00) [39]


> Зачем использовать аффигенно тормознутые ф-ии, если можно
> написать быстрый однопроходный код?

потомучто у меня не миллионы слов - а маленький код понять легче - ну если не понять то хотя бы меньше кода....


> Клавиатуру на русский переключи перед копированием :)

помогло... неужели програмно переключать чтобы работало наверняка?


Johnmen   (2008-02-12 00:28:00) [40]


> ketmar ©   (12.02.08 00:04) [21]
> интересно, почему никто не вспомнил про TStrings.CommaText?

Потому, что и пробел является неотменным разделителем.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо