newmen_
Гость
|
|
« : 30-10-2006 11:24 » |
|
Проблема в следующем.
При программном присвоении: ComboBox1.DroppedDown:=True; пропадает курсор, т.е. перестает быть видимым.
Уже все вроде перепробовал... Может быть кто знает выход из этой ситуации? Заранее спасибо!!
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #1 : 30-10-2006 14:33 » |
|
если имеется ввиду, что курсор пропадает на поле ввода, то происходит это потому, что фокус перемещается на открывающийся список, а курсор показывается только на активном в данный момент элементе. чтобы он оставался на поле ввода, надо просто вернуть фокус обратно. При этом текущий текст в комбобоксе автоматически выделится, если этого тоже нужно избежать - то стоит сбросить SetLength в 0: ComboBox1.DroppedDown := TRUE; ComboBox1.SetFocus; ComboBox1.SelLength := 0;
upd: правда, я не знаю, как этот код себя поведёт в пятёрке (в D7 это работает), но вряд ли такие вещи сильно изменились.
|
|
« Последнее редактирование: 30-10-2006 15:15 от x77 »
|
Записан
|
|
|
|
newmen_
Гость
|
|
« Ответ #2 : 31-10-2006 03:44 » |
|
Прошу прощения, второпях забыл уточнить самую важную деталь! Курсор пропадает у мыши (и над ComboBox и над формой его не видно), правда на клик и перемещение невидимого курсора приложение реагирует. т.е. как будто выполнено - ShowCursor(false); Хотя когда интерактивно разворачиваешь список ComboBox, то все видно.
|
|
« Последнее редактирование: 31-10-2006 11:44 от newmen_ »
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #3 : 31-10-2006 13:15 » |
|
хы. у меня это не воспроизводится...
это не может быть "штатным", так сказать, глюком, чтобы при выполнении рутинной операции с экрана пропадал курсор. за такие чудеса Багланд бы уже давно грязно и цинично изнасиловали. попробуй выполнить прогу на другой машине. попробуй поменять параметры отображения окон в настройках винды (Show when dragging поставить в TRUE, например). в общем, если я правильно понял ситуацию, то это что-то связанное лично с твоим компом (виндой)
|
|
|
Записан
|
|
|
|
DemonicAlligator
Гость
|
|
« Ответ #4 : 31-10-2006 15:56 » |
|
oldcursor:=Screen.Cursor; ComboBox1.DroppedDown:=True; Screen.Cursor:=oldcursor; Application.ProcessMessages;
попробуй?
|
|
|
Записан
|
|
|
|
newmen_
Гость
|
|
« Ответ #5 : 01-11-2006 03:27 » |
|
x77: Не совсем. Курсор невидим только в пределах формы, за ее пределами все как обычно, не думаю, что дело в винде. Пробовали на разных машинах и разных делфях (d5, d7) - результат один. Синий Аллигатор: Я пробовал такой вариант в несколько другом виде: ComboBox1.DroppedDown:=True; Screen.Cursor:=crDefault; и просто (для формы) Cursor:=crDefault; это не помогает. Еще пробовал: ShowCursor(true); тоже бесполезно.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #6 : 01-11-2006 13:07 » |
|
я не смог добиться того, чтобы у меня пропал курсор... да и не должен он пропадать. проверь ещё раз остальной код, что-то там в момент открытия комбобокса происходит.
|
|
|
Записан
|
|
|
|
DemonicAlligator
Гость
|
|
« Ответ #7 : 02-11-2006 11:29 » |
|
А какие компоненты на форме лежат? нету ненароком, каких хитрых?
|
|
|
Записан
|
|
|
|
newmen_
Гость
|
|
« Ответ #8 : 02-11-2006 13:25 » |
|
неа, для чистоты эксперимента я создал отдельный проект с 1 формой и 1 КомбоБоксом
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #9 : 02-11-2006 13:38 » |
|
newmen_, приведи весь код основного юнита, плз.
|
|
|
Записан
|
|
|
|
newmen_
Гость
|
|
« Ответ #10 : 03-11-2006 03:42 » |
|
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) ComboBox1: TComboBox; Edit1: TEdit; //просто для табуляции procedure ComboBox1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
function FindStr(substr:string; items1:TStrings):integer; var i:integer; begin result:=-1; for i:=0 to items1.Count-1 do begin if pos(AnsiUpperCase(substr),AnsiUpperCase(items1[i]))=1 then begin //слово с 1-позиции result:=i; break; end; end; end;
procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var ind,subLen:integer; begin if (ord(key)<$30) then exit;
ind:=FindStr(ComboBox1.Text,ComboBox1.Items); if ind>=0 then begin subLen:=length(ComboBox1.Text); ComboBox1.ItemIndex:=ind; ComboBox1.DroppedDown:=true; //Application.ProcessMessages;
if subLen<length(ComboBox1.Text) then begin ComboBox1.SelStart:=subLen; ComboBox1.SelLength:=length(ComboBox1.Text)-subLen; end; end else ComboBox1.DroppedDown:=false;
end;
procedure TForm1.FormCreate(Sender: TObject); begin //для примера ComboBox1.Items.Add('Япония'); ComboBox1.Items.Add('Австралия'); ComboBox1.Items.Add('Россия'); ComboBox1.Items.Add('Канада'); ComboBox1.Items.Add('Швеция'); ComboBox1.Items.Add('Франция'); end;
end.
это для поиска строк по Комбобоксу в 5-ке при наборе. Что-то вроде компенсации отсутствия в ней свойств, которые имеются в 7-ке: AutoComplete и AutoDropDown. Т.е. вышеописанная проблема появляется при вводе букв - как только (при нахождении подстроки) раскрывается КомбоБокс.
|
|
« Последнее редактирование: 07-12-2007 19:51 от Алексей1153++ »
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #11 : 03-11-2006 10:31 » |
|
хех. это, всё-таки, стандартная фича. твои процедуры там не нужны, просто открой пустую форму, кинь на неё TEDit, и начни в него что-то вводить. курсор пропадает с экрана.
пока не уверен, что это можно как-то бороть. всё ренализовано на уровне TWinControl, а то и ниже.
|
|
|
Записан
|
|
|
|
newmen_
Гость
|
|
« Ответ #12 : 03-11-2006 10:54 » |
|
при вводе - да, но стоит только "пошевелить" мышью - курсор появляется. А здесь почему-то нет. Я пытался посмотреть, как у них классы реализованы, но для меня это слишком пока сложно.
|
|
|
Записан
|
|
|
|
|