Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

ComboBox... устал с ним бороться... помогите, plz   Найти похожие ветки 

 
Revolter   (2003-09-24 19:13) [0]

1) нет курсора
создаю так:
    e2:=newComboBox(Form1.Form,[coUpperCase,coSort]);
активирую так:
    e2.DoSetFocus
в итоге комбобокс без мигающего курсора.. :(

2) требуется выделить часть текста (как в Internet Explorer"e), а свойства SelStart и SelLength у комбобокса служат для другого :(

поможите люди добрые..

еще вопрос: нет диалогов в KOL, аналогичных InputQuery из Dialogs, а то, при включении модуля последнего, экзэшник возрастает примерно на 300 Кб
:(  ..?


 
savva ©   (2003-09-25 20:13) [1]

1) не знаю - а попробовать не могу, в инете не с моего компа..
2) если до завтра подождешь - то будет тебе InputBox.


 
Revolter   (2003-09-25 23:57) [2]

подожду ]:-]


 
Revolter   (2003-09-26 00:02) [3]

очень нужен ответ на первый вопрос.. помогите люди добрые..


 
Revolter   (2003-09-26 00:04) [4]

и на второй тоже..


 
savva ©   (2003-09-26 09:37) [5]

я поступил просто с диалогом ввода - выдрал его из модуля, слегка подогнал - и вот, кушайте - не обляпайтесь:)
{ Input dialog }

function GetAveCharSize(Canvas: PCanvas): TPoint;
var
 I: Integer;
 Buffer: array[0..51] of Char;
begin

 for I := 0 to 25 do Buffer[I] := Chr(I + Ord("A"));
 for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord("a"));
 Result:=TPoint(Canvas.TextExtent(Buffer));
 Result.X := Result.X div 52;
end;

type
 PInputQuery = ^TInputQuery;
 TInputQuery = object (TControl)
    procedure ButtonClick( Sender: PObj );
 end;
 function NewInputQuery(parent : PControl;Caption:string):PInputQuery;
 begin
    result := PInputQuery(NewForm(parent,Caption));

 end;
procedure TInputQuery.ButtonClick;
begin
 //
 ModalResult:=sender.Tag;
end;
function InputQuery(const ACaption, APrompt: string;
 var Value: string): Boolean;
var
 Form_ :PInputQuery;
 Prompt,Edit: PControl;
 DialogUnits: TPoint;
 ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
 Result := False;
 Form_ := NewInputQuery(applet,ACaption);
 with Form_^ do
   try
     ModalResult:=idCancel;

     Form_.Font.FontPitch := fpVariable;
     Form_.Font.FontHeight := 10;
     Canvas.Font.FontPitch := fpVariable;
     Canvas.Font.FontHeight := 10;

     //DialogUnits :=   GetAveCharSize(Form_.Canvas);
     DialogUnits.x:= 6;
     DialogUnits.y:= 13;

   Form_.ExStyle := Form_.ExStyle or WS_EX_DLGMODALFRAME or WS_EX_WINDOWEDGE;
   Form_.Style := Form_.Style and not (WS_MINIMIZEBOX or WS_MAXIMIZEBOX);
   Form_.ClientWidth := MulDiv(180, DialogUnits.X, 4);
   Form_.ClientHeight := MulDiv(63, DialogUnits.Y, 8);
   DeleteMenu( GetSystemMenu( Form_.GetWindowHandle, False ), SC_CLOSE, MF_BYCOMMAND );
   Form_.CenterOnParent;
     Prompt := NewWordWrapLabel(Form_,APrompt);
     with Prompt^ do
     begin
       Left := MulDiv(8, DialogUnits.X, 4);
       Top := MulDiv(8, DialogUnits.Y, 8);
       Caption := APrompt;
       VerticalAlign:=vaBottom;
       AutoSize(True);
     end;
     Edit := NewEditbox( Form_,[]);
     Edit.Ctl3D := False;
     Edit.Color := clInfoBk;
     Edit.DoubleBuffered := True;
     Edit.TextAlign := taCenter;

     with Edit^ do
     begin
       Left := Prompt.Left;
       Top := MulDiv(19, DialogUnits.Y, 8);
       Width := MulDiv(164, DialogUnits.X, 4);
//        MaxLength := 255;
       Text := Value;
       SelectAll;
     end;
     ButtonTop := MulDiv(41, DialogUnits.Y, 8);
     ButtonWidth := MulDiv(50, DialogUnits.X, 4);
     ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
     with NewButton(Form_,"OK")^ do
     begin
       tag := idOK ;
       DefaultBtn:=true;
       SetPosition(MulDiv(38, DialogUnits.X, 4), ButtonTop);
       Width:= ButtonWidth;
       Height:= ButtonHeight;
       OnClick:=ButtonClick;
     end;
     with NewButton(Form_,"Cancel")^ do
     begin
       tag := idCancel;
       CancelBtn:=true;
       SetPosition(MulDiv(92, DialogUnits.X, 4), ButtonTop);
       Width:= ButtonWidth;
       Height:= ButtonHeight;
       OnClick:=ButtonClick;
     end;
     if ShowModal = idOk then
     begin
       Value := Edit.Text;
       Result := True;
     end;
   finally
   if assigned(form_) then
       Form_.Close;
       Free_And_Nil(Form_);
   end;
end;

function InputBox(const ACaption, APrompt, ADefault: string): string;
begin
 Result := ADefault;
 InputQuery(ACaption, APrompt, Result);
end;


 
Revolter   (2003-09-26 11:40) [6]

спасибо! попробую.. а что на счет ComboBox"а?


 
savva ©   (2003-09-26 11:58) [7]

вот этот код  у меня работает.. и курсор мигает...
   e2 := NewComboBox( Form, [  coSort, coUpperCase ] );
   e2.SetPosition( 136, 16 );

   e2.Color := clWindow;
   e2.Items[ 0 ] := "ComboBox1";
   e2.CurIndex := 0;
   e2.CreateWindow;
   e2.DoSetFocus;


 
Revolter   (2003-09-26 12:57) [8]

а как выделить часть текста в комбобоксе? т.е. есть аналоги SelStart и SelLength для ComboBox"а, как в EditBox"е?


 
savva ©   (2003-09-26 15:17) [9]

e2.Perform(CB_SETEDITSEL,0,MAKELPARAM(1,6));

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/ceconcomboboxfunctions.asp


 
Revolter   (2003-09-26 15:38) [10]

большое спасибо!!!

будете у нас на Колыме..  ]:-]


 
savva ©   (2003-09-26 16:34) [11]

> Revolter   (26.09.03 15:38) [10]
уж лучше вы к нам:))


 
Revolter   (2003-09-26 18:04) [12]

:)

хм.. диалог не работает.. - белое окно, без кнопок и едитбокс желтый без бордера.. :(

а с комбобоксом разобрался - за ним был ImageShow и из-за этого не было курсора.. это глюк KOL?


 
Gandalf ©   (2003-09-26 18:36) [13]

У меня есть готовый и рабочий InputBox - это не переделка оригинало, а свой вариант - может подойдет?

Тут две версии по компиляции (Модаль не модаль) - и две версии по реализации, не помню точно какая пахала - как побробуете, мне скажите:

// 27-apr-2003
// Zharov Dmitry and Leden Dmitry (c)
unit InputBox1;
{$DEFINE TEST_SHOWMODAL}

interface

uses
 KOL,Windows;

function inputbox(caption:string;findtext:string):string;

implementation

type
 PInputBoxForm=^TInputBoxForm;
 TInputBoxForm=object(TObj)
   Form:PControl;
   Edit:PControl;
   Button:PControl;
   Text:String;
   procedure OnClick(Sender : PObj );
 end;

procedure TInputBoxForm.OnClick(Sender : PObj );
begin
 Text:=Button.Text;
 {$IFDEF TEST_SHOWMODAL}
   Form.ModalResult:=1;
 {$ELSE}
   Form.Close;
   // И куда текст пойдет?
   Free; // Вообще по мне - экстримально.
 {$ENDIF}
end;

function InputBox(caption:string; findtext:string):string;
var
 InputBoxForm:PInputBoxForm;
 tmp:String;
begin
 New(InputBoxForm,Create);
 with InputBoxForm^ do
 begin
 form:=NewForm(applet, caption );
 form.Style:= WS_BORDER or WS_SYSMENU or WS_VISIBLE;;
 edit:=neweditbox(form,[]).Size(180,22);
 edit.Left:=20;edit.Top:=20;edit.Color:=clwhite;
 edit.Text:=findtext;
 button:=newbutton(form,"Ok").Size(55,22);
 button.Left:=215;
 button.Top:=20;
 button.OnClick:=OnClick;
 form.Height:=110;
 form.Width:=280;
 form.CenterOnParent;
 {$IFDEF TEST_SHOWMODAL}
   form.ShowModal;
   Result:=Text;
   Free;
 {$ELSE}
   form.Show;
   Result:="";
 {$ENDIF}
 end;
end;

end.


и два

// 27-apr-2003
// Zharov Dmitry and Leden Dmitry (c)
unit InputBox1;

interface

uses
 KOL,Windows;

function inputbox(caption:string;findtext:string):string;

implementation

type
 TInputBoxForm=object(TObj)
   Form:PControl;
   Edit:PControl;
   Button:PControl;
   Text:String;
 end;

var
 ResultText:String;

//{$DEFINE TEST_SHOWMODAL}

function inputbox(caption:string;findtext:string):string;
var forma,
   edit,
   button:PControl;
   text:string;

procedure close(Forma : PControl; Sender : PObj );
begin
 ResultText:=forma.Children[0].Text;
 {$IFDEF TEST_SHOWMODAL}
   forma.ModalResult:=1;
 {$ELSE}
   forma.Close;
 {$ENDIF}
end;

begin
 forma:=NewForm(applet, caption );
 forma.Style:= WS_BORDER or WS_SYSMENU or WS_VISIBLE;;
 edit:=neweditbox(forma,[]).Size(180,22);
 edit.Left:=20;edit.Top:=20;edit.Color:=clwhite;
 edit.Text:=findtext;
 button:=newbutton(forma,"Ok").Size(55,22);
 button.Left:=215;
 button.Top:=20;
 button.OnClick:=TOnEvent(Makemethod(forma,@close));
 forma.Height:=110;
 forma.Width:=280;
 forma.CenterOnParent;
 {$IFDEF TEST_SHOWMODAL}
   forma.ShowModal;
 {$ELSE}
   forma.Show;
 {$ENDIF}
 result:=ResultText;
end;

end.


 
Revolter   (2003-09-26 19:07) [14]

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


 
Gandalf ©   (2003-09-26 23:37) [15]

Я сам попробовал - работает, что то у тебя не так :(


 
Revolter   (2003-10-11 18:48) [16]

разобрался в чем была проблема:

menub:=newLabel(Form1.Form,"Меню");
menub.Transparent:=true;

после этого форма диалога становится прозрачной и у Form1 глюки начинаются... (один из них - есть есть комбобокс, за ним имэджшоу => у комбобокса нет курсора).. только не знаю чего это глюк KOL или не KOL

подскажите, как поставить у menub корректную прозрачность?



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.036 c
1-1081770200
__oleg
2004-04-12 15:43
2004.05.02
Координаты окна


7-1079083787
Term
2004-03-12 12:29
2004.05.02
Как определить раскладку клавиатуры?


4-1078684563
Volunteer
2004-03-07 21:36
2004.05.02
Как отслеживать нажатие клавиш из Win (XP) ?


14-1081846347
NeyroSpace
2004-04-13 12:52
2004.05.02
Искал я армейские присказки


1-1081947242
V-Isa
2004-04-14 16:54
2004.05.02
Событие прокрутки StringGrid.