2 pyt: ComboBox i event Itema

0
  1. Mam sobie ComboBox, który leży np. między dwoma memo - niech on ma szerokość 100. Niektóre elementy z listy rozwijanej są niestety znacznie szersze niż sam Combo, i tekst w nich się ucina. Jak zrobić aby elementy te (lista) pokazywała się np. z prawej strony (pod memo), lub też z lewej (wychdoziła zza granice boczne ComboBoxa). Narysować się nie da, bo wychodze zza granice regionu - jedyne co mi przychodzi na myśl, to od razu wywalić dużą szerokość Combo, tak, żeby nachodziła na memo (pod) i ewentualnie jakoś ukryć ten mały fragment między memo, a ComboBoxem, ale to jest takie słabe rozwiązanie :(( Czy ktos ma jakiś pomysł jak to zroibić?

  2. Tworze sobie dynamicznie element menu - i jak mogę przypisać zdarzeniu OnClick statyczną metodę obiektu. Oczywiście pokazuje się Error: niewłaściwe typy "procedure" i "TNitifyEvent". na razie dałem standardowo: Item.Onlick :=... Onclick, bo się wszystko zgadza, a dopiero w tym OnClick - wywołuję metodę. Ale czy można to zrobić bezpośrednio? - moze jakoś wskaźnikami - nie wiem ...

0
  1. Nie rozumiem zbytnio o co chodzi, ale możesz zmienić szerokość listy rozwijalnej bez konieczności zmieniania szerokości samego ComboBox'a:
SendMessage(ComboBox1.Handle, CB_SETDROPPEDWIDTH, 300 {szerokosc}, 0);
  1. A jak deklarujesz tą procedurę?
    w sekcji np. private:
procedure JakisTamOnClick(Sender: TObject); 

a później przy tworzeniu Menu:

TwojItem.OnClick := JakisTamOnClick;
0

<font color="green">2. A jak deklarujesz tą procedurę?
w sekcji np. private:
procedure JakisTamOnClick(Sender: TObject);
a później przy tworzeniu Menu:
TwojItem.OnClick := JakisTamOnClick; </span>

LKS .. tworze w public, ale to nie istotne - chodzi mi o bezpośrednie przypisanie do metody statycznej, bezparametrowej. Wywala, że złe typy.

Jeśli chodzi o pkt 1: o to chodziło - chyba będzie działać ;)

0

LKS .. tworze w public, ale to nie istotne - chodzi mi o bezpośrednie przypisanie do metody statycznej, bezparametrowej. Wywala, że złe typy.

Jak deklarujesz, a nie gdzie. A co do pierwszego punktu mógłbyś kodu wrzucić trochę??

0

Ludomir, jaki kod? - co mam tu pokazać bo nie rozumie..- zresztą problem już rozwiązany

A co do deklaracji:

procedure LoadFile; // bezparametrowa metoda statyczna

.. a w innej procedurze mam:

var
  dMarker: TMenuItem; 
begin
...
dMarker := TMenuItem.Create(MenuFile);
dMarker.RadioItem := True;
dMarker.Caption := 'Cokolwiek';
dMarker.Name := 'Cokolwiek';
dMarker.OnClick := // tu chcę odwołanie do LoadFile
MenuFile.Add(dMarker);
...
end;

Jak mówiłem - na razie zrobiłem dMarker.OnClick - i tam odwołuje się do procedury LoadFile .. ale czy da się to zrobić "bezpośrednio" ?

Mała poprawka: LoadFile musi mieć parametry.. np (Path: string)... - gdyby nie miała, dało by się zrobić dając parametr jak TNotifyEvent: Sender: TObject (thx to Ludomir)

0

Zagadałem z kolegą na GG [cya] i tyle mi przyszło na myśl, ale czy to ma sens??

TLoad = class
  public
    path: string;
    procedure LoadFile(Sender: TObject);
  end;

//obsługa zdarzenia
var
  m: TMenuItem;
  p: TLoad;
begin
  p := TLoad.Create;
  p.path := 'ściezka';
  m := TMenuItem.Create(menu);
  m.Name := 'nm';
  m.Caption := 'cpt';
  m.OnClick := p.LoadFile;
  menu.Items.Add(m);
0
<font color="green"> TLoad = class public path: string; procedure LoadFile(Sender: TObject); end;

//obsługa zdarzenia

var
m: TMenuItem;
p: TLoad;
begin
p := TLoad.Create;
p.path := 'ściezka';
m := TMenuItem.Create(menu);
m.name := 'nm';
m.Caption := 'cpt';
m.OnClick := p.LoadFile;
menu.Items.Add(m);</span>

Zapewne tak, ale pytanie - czy się opłaca.. ? Zajmuje więcej miejsca w kodzie niż poprzednie (klasyczne) rozwiązanie, a i chyba wolniejsze jest, tak na oko patrząc :)..

1 użytkowników online, w tym zalogowanych: 0, gości: 1