Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi

Автор: EZH
Дата сообщения: 03.07.2005 19:46
Larry Laffer
Думаю алгоритм можно и самому своять по правилам, а вот изображения карт можно запользовать из той же библиотеки cards.dll, что использует sol.exe
Пример на Delphi: _http://it-6.mgapi.edu/predmets/other.php?id=22 (смотри cards.zip)
Автор: h0mer
Дата сообщения: 04.07.2005 10:54
OdesitVadim
это дело не прокатывает
Автор: OdesitVadim
Дата сообщения: 04.07.2005 11:17
h0mer
Должно работать
А в общем почитай здесь, думаю это то, что тебе надо
www.delphiworld.narod.ru/base/del_folder_name.html
Автор: h0mer
Дата сообщения: 04.07.2005 12:42
OdesitVadim
Уже разобрался, спасибо. Гугле железная штука.
Мож кому пригодиться.

Function FitOnCanvas(MyCanvas : TCanvas; MyString : String) : String;
Var MyRect : TRect;
Begin
MyRect := MyCanvas.ClipRect;
DrawTextEx(MyCanvas.Handle, PChar(MyString), Length(MyString), MyRect,
DT_MODIFYSTRING or DT_NOPREFIX or DT_PATH_ELLIPSIS, NIL);
// You may try DT_END_ELLIPSIS too.
Result := MyString;
End;
Автор: Larry Laffer
Дата сообщения: 05.07.2005 14:52
Подскажите, пожалуйста:

Есть форма, на ней Spin, в котором указано число от 0 до 255. Как мне преобразовать это число в 16 формат и присвоить его переменной byte?

Заранее благодарен...
Автор: evle
Дата сообщения: 05.07.2005 15:07
Larry Laffer
Если тебе нужно присаваивать число переменной byte, то зачем в 16-ричную систему его конвертировать?

Писать что-то вроде

Код:
var
x: byte;
.....
x=Spinedit1.Value;
Автор: Larry Laffer
Дата сообщения: 05.07.2005 15:57
evle,

Цитата:
x=Spinedit1.Value;

Это прокатывает, если число от 0 до 99, а если число равно 255???
Автор: evle
Дата сообщения: 05.07.2005 16:20
Larry Laffer
А что конкретно не работает при 255? Вроде должно.
Автор: Larry Laffer
Дата сообщения: 05.07.2005 16:23
evle, число 255 в 16-чном формате ведь должно быть представлено как FF, а если просто присваивать a: byte = 255, то будет не FF.
Автор: mr_eoi
Дата сообщения: 05.07.2005 16:27
Larry Laffer
Вообще-то в машинной памяти число 255, оно же (hex)FF хранится в виде (bin)11111111 и не зависит от способа его представления (читай написания).
Автор: Larry Laffer
Дата сообщения: 05.07.2005 16:40
mr_eoi, я это прекрасно знаю. Попроще нельзя?
Автор: BrotherAlex
Дата сообщения: 05.07.2005 16:43

Цитата:
evle, число 255 в 16-чном формате ведь должно быть представлено как FF, а если просто присваивать a: byte = 255, то будет не FF

А что будет?

Делаю

procedure TForm1.Button1Click(Sender: TObject);
var
mmm : byte;
begin
mmm:=SpinEdit1.Value; (255)
Label1.Caption:=IntToHex(mmm,2);
end;

Получаю FF
Иначе и быть не должно
Автор: mr_eoi
Дата сообщения: 05.07.2005 17:16
Larry Laffer
Сам TSpinEdit умеет отображать числа только в десятичном формате (заданно жёстко). Если потребно уметь работать с числами любого основания исчисления, придётся использовать связку TEdit + TUpDown (я, к примеру, делал представление чисел аж в 24-ричной системе).
Автор: BrotherAlex
Дата сообщения: 06.07.2005 16:56
Проблемка.
Есть форма на которой лежит много разноцветных TStaticText , как только кладу на форму TXPManifest все StaticText становятся черного цвета (в RunTime)

В какую сторону ковырять?
Автор: mr_eoi
Дата сообщения: 06.07.2005 17:04
BrotherAlex
А если манифест ресурсами цеплять? Я так, например, в Delphi 3 делаю.
Автор: BrotherAlex
Дата сообщения: 06.07.2005 17:52
Пофиг - откомпилил без манифеста - все нормально
Сую в ресурс манифест глюки
Автор: mr_eoi
Дата сообщения: 06.07.2005 18:00
BrotherAlex
А не пробовал со свойством Transparent у StaticText поиграться? Если не поможет, переставь дрова своей видюхи.
Автор: ShIvADeSt
Дата сообщения: 07.07.2005 01:22
mr_eoi

Цитата:
А не пробовал со свойством Transparent у StaticText поиграться? Если не поможет, переставь дрова своей видюхи.

Не поможет, вроде, просто Дельфи не правильно работает с манифестами. Тут вариант вместо статиктекста лэйблы использовать. Не помню что у меня за проект был, но при добавлении манифеста тоже глючки появлялись.
Автор: MICROPOM
Дата сообщения: 07.07.2005 08:58
Я хочу написать программу, которая сможет закрывать тот или иной порт либо ваще варубить сетевую карту. А ещё можно ли отключить другое устройство, например жёсткий диск.
Подскажите плизз, как это сделать.
Автор: BrotherAlex
Дата сообщения: 07.07.2005 12:06

Цитата:
А не пробовал со свойством Transparent у StaticText поиграться?

С транспарент=False все нормально. Премного сенькаю.
Автор: Z MeZe
Дата сообщения: 07.07.2005 22:32
Может спрошу совсем хрень,.. но все же:
считаю файл в длинную строку.

var
Sbuf: PChar; // длинная строка
buf: array [0..65535] of char; // буфер чтения
Size: Longint; // длина файла
...
begin
Sbuf := StrAlloc(size)

{ ... открытие файла и т.д. ... }

repeat

{ ... считывание в буфер и т.д. ... }

StrCat(SS, buffer); // "накапливаем" строку

{ ... и т.д. ... }

until // конец файла
end;

Файл содержит вещественные числа, но есть и текст.
Так вот в чем вопрос:
Как мне выцепить из этой строки числа и их в массив?

Может я сунулся не в то направление, подскажите тогда другое решение (буфер массива char обязателен).

Добавлено:
Короче, как быстро проанализировать эту стоку (если это так делается). Или предложите вариант.
Автор: ShIvADeSt
Дата сообщения: 08.07.2005 01:02
Z MeZe

Цитата:
Sbuf: PChar; // длинная строка
это не длинная строка, это все-таки строка с нулевым окончанием, длинная строка вроде string если ничего не указывать компилятору, то он ее по умолчанию

Цитата:

AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
The reserved word string functions like a generic type identifier. For example,

var S: string;

creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString.

так что строки немножко длиннее будут, чем PChar.
Немножко бредово насчет
Цитата:
буфер массива char обязателен
в общем, я бы делал для выдирания чисал след. образом (только это работает с обычными строками), потом 2 способ
используешь val она возвращает позицию символа который нельзя перевести в число, то есть если это все загать в цикл и удалить вначале все не цифры, то потом получая позицию ошибочного элемента, мы копируем все символы от начала строки в массив чисел, потом удаляем все до ошибочного символа, и опять сканируем дальше.
второй способ, создаем множество символов и добавляем туда точку, потом начинаем сканировать строку, как только находишь символ из множества, запоминаешь его позицию. потом ищешь пока не найдешь символ не из множества копируешь что посередине это твое число, потом обрезаешь строку, до символа не из множества включительно.
Третий способ, вроде можно парсить строку RegExp но я их не использовал, мож кто другой знает.
Автор: Z MeZe
Дата сообщения: 08.07.2005 10:24
ShIvADeSt

Цитата:
Немножко бредово насчет

Цитата:
Цитата:
буфер массива char обязателен

Автор: Solnake
Дата сообщения: 08.07.2005 12:37
Подскажите где можна найти харошие уроки по ООП в Delphi но основаные больше на практике. НУ чобы показывали это все на практике а не только в теории. Как ООП использовать правильно в каких случаях и воще все нюансы и стиль написания класами в Delphi.
Может много хочу, но всетаки у кого-то есть какая-то информация.
Автор: MrZeRo
Дата сообщения: 12.07.2005 08:19
Solnake

Цитата:
харошие уроки по ООП в Delphi но основаные больше на практике

Исходные тексты Delphi VCL. "Практичнее" некуда
Автор: MICROPOM
Дата сообщения: 12.07.2005 13:58
Подскажите

var
i:integer;


begin
progressbar1.Min := 0;
progressbar1.Max := 100;
for i:=1 to 100 do
begin
progressbar1.Position := i;
sleep(10);
if (1<i)and (i<25) then label1.Visible := true;
If (25<i)and (i<50) then label2.Visible := true;
If (50<i)and (i<75) then label3.Visible := true;
end;
end;


Я хочу чтоб лэйблы появлялись по мере увеличения прогрессбара, а они появляются только в конце.
Подскажите плз чё делать.

Добавлено:
Еще так пробовал

If i= 25 then label1.Visible := true;
If i= 50 then label1.Visible := false;
If i= 50 then label2.Visible := true;
If i> 75 then Sleep(100);
If i= 75 then label2.Visible := false;
If i= 75 then label3.Visible := true;
Автор: EZH
Дата сообщения: 12.07.2005 14:32
MICROPOM
Добавь Application.ProcessMessages в цикл
Автор: MICROPOM
Дата сообщения: 14.07.2005 08:31
EZH
А как это сделать? Я только начинаю разбираться в делфе.
Автор: OdesitVadim
Дата сообщения: 14.07.2005 18:09
MICROPOM
Перед Sleep(100).
А лучше сделать с помощью Timer'а.
Когда надо запускаеш (Timer1.enabled:=true;)
Внутри счётчик. Правда переменную i прийдётся сделать глобальной.
когда счётчик достигнет конца - таймер останавливается

З.Ы. Тут ещё потоки могут предложить, но для начинающего и таймера хватит. А если твоя прога в цикле Application.ProcessMessages использует, то это значит алгоритм переделывать надобно
Автор: h0mer
Дата сообщения: 15.07.2005 07:29
MICROPOM
делай в цикле всем лейблам.update или refresh.
типа так:
for i:=1 to 100 do
begin
progressbar1.Position := i;
sleep(10);
if (1<i)and (i<25) then label1.Visible := true;
If (25<i)and (i<50) then label2.Visible := true;
If (50<i)and (i<75) then label3.Visible := true;
label1.Refresh;
label2.Refresh;
label3.Refresh;
end;
end;

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.