[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    вроде нашел то что нужно только осталось найти сдесь ошибку-

    не выводит в листбокс ничего
     
  2. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Code:
    procedure TForm1.Button2Click(Sender: TObject);
    var TS : TStringList;
    i: integer;
    s: string;
    begin
    if OpenDialog1.Execute then
    [COLOR=Red]begin[/COLOR]
    TS := TStringList.Create;
    TS.LoadFromFile(OpenDialog1.FileName);
    TS.IndexOf('[3]');
    Pos('0=', TS.Strings[i]);
    Listbox1.Items.Add(s);
    [COLOR=Red]end;[/COLOR]
    end;
     
  3. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    и все равно листбокс после загрузки пустой
     
  4. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    А блин точно, пропустил кое что

    Code:
    Listbox1.Items.Add(s);
    Ну а в переменной s ниче ж нету! Если несправишся то расскажи собственно что программа должна делать?
     
  5. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    так рассказывал вроде выше. имеем файл .txt с содержанием-
    [3]
    0=34534D9304
    задача получить значение 34534D9304 в листбоксе
     
  6. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    Блин ну вы жжоте :D
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    TS : TStringList;
    i: integer;
    begin
    if OpenDialog1.Execute then
    begin
    TS := TStringList.Create;
    TS.LoadFromFile(OpenDialog1.FileName);
    i:=TS.IndexOf('[3]');
    Listbox1.Items.Add(TS[i+1]);
    end;
    end;
    Так тебе нужно? Мобилка ты вообще делфи хоть чуть-чуть знаешь? Такое ощущение что ты его первый раз видишь. Мне не жалко накодить готовое, но ты должен сам учиться!
     
    #4786 =Zeus=, 25 Nov 2009
    Last edited: 25 Nov 2009
  7. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    =Zeus= почти так. код выводит стороку 0=34534D9304 а нужно без 0= т.е 34534D9304
    так я же и учу потихоньку
     
  8. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    У тебя во всех строках будет "0="? Если да то просто поменяй
    Code:
    Listbox1.Items.Add( Copy(TS[i+1], 3, length(TS[i+1]) ) );
    Это значит что мы добавим строку с 3-его символа до последнего. то есть без первых двух символов "0=". Фактически нам не важно, какие будут первые 2 символа.

    ...
    Блин, тут экстрасенсов нету. Я на твой вопрос ответил. Ты сказал что тебе нужно, я написал код.
    Я спать.

    Шайтанама, дружище, выучи сначала основы, а потом проси других. Ты ведь элементарного не можешь, а хочешь чтоб за тебя другие делали.
     
    #4788 =Zeus=, 25 Nov 2009
    Last edited: 25 Nov 2009
  9. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    нет не во всех. и если в файле нет блока [3] то выбирается первый почему то. а желательно что бы посылалось сообщение в листбокс - block 3 not found
     
    #4789 mobilka, 25 Nov 2009
    Last edited: 25 Nov 2009
  10. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Как выше говорилось - курите библиотеку IniFiles
    Типичное строение для инишника и делается все на много проще и приятней...

    В Uses дописываем IniFiles
    и кнопочка:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var blocks:TStringList;
        ini:TIniFile;
        i:integer;
        s:string;
    begin
     blocks:=TStringList.Create;
     ini:=TIniFile.Create('.\file.txt'); //связываем переменную с файлом
     ini.ReadSections(blocks); //считываем в стринглист все "блоки"
     blocks.Sort; // обязательно для поиска по стринглисту
     if blocks.Find('3',i) then //ищем "блок" [3] - без скобок
     begin
      s:=ini.ReadString('3','0','Значение 0 не найдено');
      ListBox1.Items.Add(s); //запивывает значение если найдено, если нет верхнюю фразу
     end
     else ListBox1.Items.Add('Block 3 not found'); //ну и это если сам блок не найден
    end;
    Все другие операции так же можно реализовать в пару строк а не делать "обрезание" по символу = или скобкам :p
     
  11. Freedom

    Freedom Elder - Старейшина

    Joined:
    2 Jul 2007
    Messages:
    38
    Likes Received:
    92
    Reputations:
    8
    Блин ребят уже запарился с этой штукой. инди 10. как в мемо вывести нормальный текст а не типа такого "?iaaen.Aaiuae"
     
  12. denjf

    denjf Member

    Joined:
    12 Nov 2008
    Messages:
    88
    Likes Received:
    12
    Reputations:
    -1
    Вот попрос о работе с idhttp.

    Вообщем делаю брут.

    Все брутит хорошо но иногда выкидывает ошибку Timeout.

    Я прописал ReadTimeout:=30000.
    Долго брутило все було хорошо но потом выкинуло ошибку Error ReadTimeout

    Как сделать что бы если врямя таймаута вышло прога повторяла запрос а не выдовала ошибку.


    дупустим

    http1.readtimeout:=30000;
    http1.get('sait.com');

    если мы не получили ответ то заного пытаемся выполнить http1.get('sait.com');
     
  13. Пуховой

    Joined:
    25 Nov 2007
    Messages:
    46
    Likes Received:
    37
    Reputations:
    0
    Freedom, в свое время писал функцию:

    Code:
    function httpget (http : tidhttp; adr : widestring) : widestring;
    var
      str : tstringstream;
    begin
      str := tstringstream.Create('');
      try http.Get (adr, str); except end;
      Result := str.DataString;
      str.Free;
    end;
    Вызов - s := httpget (http, 'http://vkontakte.ru');

    Но советую вам на юникодную delphi пересесть - проблем знать не будете.
     
    1 person likes this.
  14. RumShun

    RumShun Member

    Joined:
    27 Oct 2008
    Messages:
    283
    Likes Received:
    75
    Reputations:
    6
    denjf, попробуй использовать исключения
    try
    //code
    except
    end;
    простейший пример
     
    2 people like this.
  15. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    У меня вопрос по прехвату api функций, использовал эту статью
    http://www.xakep.ru/post/22263/default.asp

    Вызываю замену апи функции на свою(в инжектируемой библиотеке)
    InterceptDllCall(hInstance, 'user32.dll', 'MessageBoxA',Pointer(@MyMessageBox), nil, Pointer(myProc));

    Вот описание, что бы было понятней

    Code:
    function InterceptDLLCall(hLocalModule: HModule; c_szDllName, c_szApiName:PChar;
    pApiNew, pApiToChange: Pointer; var p_pApiOrg: Pointer): boolean;
    
    hLocalModule: HModule;  – модуль в котором находиться Import Table
    c_szDllName:PChar; – имя DLL, в которой находиться перехватываемая функция
    c_szApiName:PChar;  – имя перехватываемой функции
    pApiNew: Pointer;  – указатель на нашу функцию, которая будет вызываться вместо перехватываемой.
    pApiToChange: Pointer;  – указатель на перехватываемую функцию, если равно nil, то адрес функции определяется через c_szDllName и c_szApiName.
    p_pApiOrg: Pointer;  – указатель на старую перехватываемую функцию
    

    но проблема вот в чём, замена функции работает только в инжектируемой библиотеке, а не в самом приложении куда я её инжектирую.
    Даю гарантию это из за hLocalModule так как hInstance - дескриптор текущего экземпляра приложения, которым является инжектируемая библиотека а не само приложение.
    Так как же мне узнать HModule этого приложения?
     
    #4795 ZET36, 25 Nov 2009
    Last edited: 25 Nov 2009
  16. ZiGGi

    ZiGGi New Member

    Joined:
    17 Jul 2009
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    как сделать такой элемент в Delphi 7.0?
    [​IMG]
     
  17. StealthMaster

    StealthMaster Member

    Joined:
    3 Dec 2008
    Messages:
    52
    Likes Received:
    11
    Reputations:
    0
    Возьми Memo, задай цвет, отключи полосы прокрутки (ScrollBars := ssNone), укажи выравнивание по правому краю (Alignment := taRightJustify).
     
    #4797 StealthMaster, 25 Nov 2009
    Last edited: 25 Nov 2009
  18. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    подскажите где тут происходит обрезание первых двух значений в строке?
     
  19. StealthMaster

    StealthMaster Member

    Joined:
    3 Dec 2008
    Messages:
    52
    Likes Received:
    11
    Reputations:
    0
    Code:
      s:=ini.ReadString('3','0','Значение 0 не найдено');
    
    Вот здесь считывается из блока [3] строка соответствующая "0=". 0 в данном случае является именем сохраненной строки, = - просто разделитель. Поэтому никакого "обрезания" после считывания делать не приходится.
     
  20. mobilka

    mobilka Member

    Joined:
    13 Oct 2009
    Messages:
    39
    Likes Received:
    5
    Reputations:
    0
    PHP:
    begin
    if OpenDialog1.Execute then
        begin
     blocks
    :=TStringList.Create;
     
    ini:=TIniFile.Create(OpenDialog1.FileName);
     
    ini.ReadSections(blocks);
     
    blocks.Sort;
     if 
    blocks.Find('3',ithen
     begin
      s
    :=ini.ReadString('3','0','Çíà÷åíèå 0 íå íàéäåíî');

     
    end
     
    else ListBox1.Items.Add('Block 3 not found');
      
    begin
     
    for i:=1 to length(s) do if copy(s,i,1)='0' then continue else break;
    temp:=copy(s,i,length(s)-i+1);
    ListBox1.Items.Add(temp);
    end;
    end;
    end;
    вот придумали но работать не хочет.
    все. поправили
    этот код выдает обрезок строки вида 01234567. теперь задача что бы выдавалось не по порядку а в такой последовательности- 67452301.
    господа помогите. такую беду и в гугле не сьискать
     
    #4800 mobilka, 26 Nov 2009
    Last edited: 26 Nov 2009
    1 person likes this.
Thread Status:
Not open for further replies.