Arsip: bagaimana spy popup menu muncul otomatis (tanpa klik kanan)?

 
user image
more 13 years ago

ignisce

mas2..saya minta tolong.. saya punya richedit dan popup menu, gimana sih caranya supaya ketika saya ketikkan huruf2 tertentu di richedit muncul popup menu disamping huruf yang saya ketikkan tadi, secara otomatis atau tanpa klik kanan/kiri pada richedit tsb,dan item dari popup menu yg muncul berubah-ubah sesuai huruf terakhir yang saya ketikkan tadi. trimakasih sebelumnya atas bantuannya, saya mohon bantuannya :D
user image
more 13 years ago

DelphiExpert

1. trap even OnKeyPress / OnKeyDown 2. populate data sesuai kebutuhan app anda 3. jika data telah cukup utk melakukan filtering (biasanya), build menu item & tampilkan popup. misal (trap tombol2 tertentu):

if Key = 'A' then
begin
  BuildMenuItems(Key); // generate menu items
  PopupMenu1.Popup(XPos, YPos); // tampilkan menu
end;
user image
more 13 years ago

ignisce

wah mas, katanya undeclared identifier : 'Xpos' popup menunya nggak mau muncul vita agak kesulitan mendefinisikan posisi cursor di rich editnya, aplikasi yang vita buat itu aplikasi pembelajaran bahasa daerah dimana tiap diketikkan huruf kluar hint (grammar corrections gto/beberapa alternatif grammar ) berupa popup menu tepat disamping huruf yang baru saja diketikkan di rich edit.. tolooooong bgt mas2..
user image
more 13 years ago

mat_koder

xpos dan ypos tentunya harus ditentukan dulu . bagaimana menentukan xpos dan ypos ?. Anda harus tau dulu posisi karakter dari richedit yg sedang diketikkan. setelah tahu posisi karakter tsb baru cari tau posisi x,y nya dalam kontrol richedit tsb. tentunya xpos & ypos bisa sedikit anda offsetkan spy ketika popup muncul , karakter yg sedang diketikkan ngga tertutup oleh popup menu. potongan kode berikut ( saya paste dari punya orang laen) mungkin bisa anda coba-coba - khususnya PixelPosInRichEdit(...):

function TForm1.CharPosInRichEdit(aRichEdit: TRichEdit; X, Y: integer): integer;
// Get the current character position (0-based) in the TRichEdit aRichEdit
// corresponding to the client coordinates X, Y.  Returns -1 if there
// is no corresponding character.
//  THERE IS A BUG IN THE MICROSOFT WIN32 HELP  regarding this - the
// parameters are passed differently from the EM_CHARFROMPOS of an edit (TMemo,
// TEdit) control.  Same goes for EM_POSFROMCHAR.  See MS Knowledgebase
// article PSS ID Number: Q137805  See PixelPosInRichEdit below for the inverse
// function.
var
  aPt: TPoint;
begin
  aPt.X := X;  aPt.Y := Y;
  result := aRichEdit.Perform(EM_CHARFROMPOS, 0, LPARAM(@aPt));
end;
function TForm1.PixelPosInRichEdit(aRichEdit: TRichEdit; aCharPos: integer): TPoint;
// The inverse of CharPosInRichEdit.  Not used in this application, but supplied
// for completeness.  Note that the inverse is not necessarily going to give back
// the same point, since a character spans multiple points.  I _think_ we get back
// the coordinate of the top left pixel of the character.
var
  aPt: TPoint;
begin
  aRichEdit.Perform(EM_POSFROMCHAR, WPARAM(@aPt), aCharPos);
  result := aPt;
end;
user image
more 13 years ago

ignisce

tolon coding lengkapnya mas...saya benar2 nggak ngerti...maklum begonya lum ilang
user image
more 13 years ago

mat_koder

aduuhhh masa sih harus lengkap selengkap-lengkap-nya ? coba istirahat dulu... nyantai dikit pasti besok pagi bego-nya sdh ilang....
user image
more 13 years ago

ignisce

vita nggak tau gimana cari posisinya.... hiks....tugasnya kumpul besoook... pake fungsi2 apa ajah??
user image
more 13 years ago

ImanD

@ignisce tambahan dari fungsi2 @mat_koder mungkin anda perlu u/ posisi kolom dan baris nya karakter dari RichEdit

procedure GetPosition(ARichEdit: TRichEdit; var X, Y: integer);
begin
  Y:=SendMessage(ARichEdit.Handle, EM_LINEFROMCHAR, ARichEdit.SelStart, 0) + 1;   
  X:=ARichEdit.SelStart-SendMessage(ARichEdit.Handle, EM_LINEINDEX, Y, 0) + 1;   
end;
user image
more 13 years ago

mat_koder

hiks....tugasnya kumpul besoook...
ala..mak... sama aja mahasiswa dari masa ke masa... selalu aja nabrak deadline.... kasiah deh.... nih cobain kode berikut

var
  PopupMenu: TPopupMenu;
  MenuItem : TMenuItem;
// trap event OnKeyPress
procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);
var
  CharIdx : integer;
  pt,pt2: TPoint;
begin
  CharIdx:=RichEdit1.Perform(EM_GETSEL, 0,0) div 65536;
  RichEdit1.Perform(EM_POSFROMCHAR, WPARAM(@Pt), CharIdx);
  pt2:=ClientToScreen(pt);
  if Assigned(PopupMenu) then
    PopupMenu.Free;
  PopupMenu := TPopupMenu.Create(self);
  MenuItem := TMenuItem.Create(PopupMenu);
  MenuItem.Caption := 'Yg diketik :' + key;
  PopupMenu.Items.Add(MenuItem);
  PopupMenu.Popup(10+Richedit1.Left+pt2.X,Richedit1.Top+pt2.Y);
  Richedit1.SetFocus;
end;
anda maunya harus PopupMenu yah...? popup menu punya kelemahan: dianya bersifat modal , harus di-klik atau select baru bisa 'ngilang'. Baiknya anda bikin semacam 'Popup Tiruan' yg ngga harus di-klik ( jadi user selalu bisa lanjutin ngetikm di edit kontrol - sementara popup menunya bisa bergeser sesuai dengan hasil ketikan). Popup Tiruan ini berupa TForm yg berisi StringGrid atau semacamnya. si TForm tsb jangan dikasih title dan border. Kode lengkap untuk bikin 'Popup titruan tsb' ? , usahakan sendiri lah yah... jangan nanya lagi.
user image
more 13 years ago

ignisce

mas2..dan kk 2 yang baiiikk adakah yang mau menjelaskan coding berikut per-kata dari coding berikut, karena bayak code yg saya nggak tau asalnya seperti : aRichEdit.Perform(EM_POSFROMCHAR, WPARAM(@aPt), aCharPos); kata2 EM_POSFROMCHAR, WPARAM(@aPt) itu dari mana asalnya ya mas? dan apa gunanya ? dimana saya bisa menemukan contoh2 fungsi yg lain? function TForm1.PixelPosInRichEdit(aRichEdit: TRichEdit; aCharPos: integer): TPoint; var aPt: TPoint; begin aRichEdit.Perform(EM_POSFROMCHAR, WPARAM(@aPt), aCharPos); result := aPt; end; procedure GetPosition(ARichEdit: TRichEdit; var x,y: integer); begin x:=ARichEdit.SelStart-SendMessage(ARichEdit.Handle,EM_LINEINDEX, x, 0)+1; y:=SendMessage(ARichEdit.Handle,EM_LINEFROMCHAR,ARichEdit.SelStart,0) + 1; end; [/list]
more ...
  • Pages:
  • 1
  • 2
Share to
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com